home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / testrender.s < prev    next >
Text File  |  1997-11-28  |  55KB  |  3,888 lines

  1.  
  2. * the 'Hello World' program in 68000 Assembler
  3. * the C version can be found in the Intuition manual
  4.  
  5. * this source code (C) HiSoft 1992 All Rights Reserved
  6.  
  7. * for Devpac Amiga Version 2 the following symbols were changed
  8. * to avoid clashes with the new include files:
  9. * Screen->MyScreen, NewScreen->MyNewScreen
  10. * Window->MyWindow, NewWindow->MyNewWindow
  11.  
  12.     opt    c+,d+
  13.  
  14.     include    workbench:utilities/devpac/system            use pre-assembled header
  15.     include    exec/exec_lib.i
  16.     include    intuition/intuition.i
  17.     include    intuition/intuition_lib.i
  18.     include    graphics/graphics_lib.i
  19.     include    graphics/text.i
  20.  
  21. INTUITION_REV    equ    31        v1.1
  22. GRAPHICS_REV    equ    31        v1.1
  23.  
  24. * Open the intuition library
  25.  
  26.     moveq    #100,d4            default error return code
  27.  
  28.     moveq    #INTUITION_REV,d0    version
  29.     lea    int_name(pc),a1
  30.     CALLEXEC OpenLibrary
  31.     tst.l    d0
  32.     beq    exit_false        if failed then quit
  33.     move.l    d0,_IntuitionBase    else save the pointer
  34.  
  35.     moveq    #GRAPHICS_REV,d0
  36.     lea    graf_name(pc),a1
  37.     CALLEXEC OpenLibrary
  38.     tst.l    d0
  39. ;    beq    exit_closeint        if failed then close Int, exit
  40.     move.l    d0,_GfxBase
  41.     lea    MyNewScreen(pc),a0
  42.     CALLINT    OpenScreen        open a screen
  43.     tst.l    d0
  44. ;    beq    exit_closeall        if failed the close both, exit
  45.     move.l    d0,MyScreen
  46.  
  47.     move.l MyScreen,a0
  48.     lea sc_BitMap(a0),a0
  49.     lea bm_Planes(a0),a0
  50.     move.l #RAWSCRN,(a0)
  51.     move.l #RAWSCRN+10240,4(a0)
  52.     move.l #RAWSCRN+10240*2,8(a0)
  53.     move.l #RAWSCRN+10240*3,12(a0)
  54.     move.l #RAWSCRN+10240*4,16(a0)
  55.     move.l #RAWSCRN+10240*5,20(a0)
  56.     move.l #RAWSCRN+10240*6,24(a0)
  57.     move.l #RAWSCRN+10240*7,28(a0)
  58.  
  59. * now initialise a NewWindow structure. This is normally easier to
  60. * do with dc.w/dc.l statement etc, but for comparison with the C
  61. * version we do it like this
  62.     lea    MyNewWindow(pc),a0    good place to start
  63.     move.w    #20,nw_LeftEdge(a0)
  64.     move.w    #20,nw_TopEdge(a0)
  65.     move.w    #300,nw_Width(a0)
  66.     move.w    #100,nw_Height(a0)
  67.     move.b    #0,nw_DetailPen(a0)
  68.     move.b    #1,nw_BlockPen(a0)
  69.     move.l    #window_title,nw_Title(a0)
  70. _temp    set    WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
  71.     move.l    #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
  72.     move.l    #CLOSEWINDOW,nw_IDCMPFlags(a0)
  73.     move.w    #CUSTOMSCREEN,nw_Type(a0)
  74.     clr.l    nw_FirstGadget(a0)
  75.     clr.l    nw_CheckMark(a0)
  76.     move.l    MyScreen(pc),nw_Screen(a0)
  77.     clr.l    nw_BitMap(a0)
  78.     move.w    #100,nw_MinWidth(a0)
  79.     move.w    #25,nw_MinHeight(a0)
  80.     move.w    #640,nw_MaxWidth(a0)
  81.     move.w    #200,nw_MaxHeight(a0)
  82.  
  83. * thats it set up, now open the window (a0=NewWindow already)
  84. ;    CALLINT    OpenWindow
  85. ;    tst.l    d0
  86. ;    beq    exit_closescr            if failed
  87. ;    move.l    d0,MyWindow            save it
  88. ;
  89. ;    move.l    d0,a1                window
  90. ;    move.l    wd_RPort(a1),a1            rastport
  91. ;    moveq    #20,d0                X
  92. ;    moveq    #20,d1                Y
  93. ;    CALLGRAF Move                move the cursor
  94. ;
  95. ;    move.l    MyWindow(pc),a0
  96. ;    move.l    wd_RPort(a0),a1            rastport
  97. ;    lea    hello_message(pc),a0
  98. ;    moveq    #11,d0
  99. ;    CALLGRAF Text                print something
  100. ;
  101. ;    move.l    MyWindow(pc),a0
  102. ;    move.l    wd_UserPort(a0),a0
  103. ;    move.b    MP_SIGBIT(a0),d1        (misprint in manual)
  104. ;    moveq    #0,d0
  105. ;    bset    d1,d0                do a shift
  106. ;    CALLEXEC Wait
  107.  
  108. ;    moveq    #0,d4                return code
  109.  
  110. * various exit routines that do tidying up, given a return code in d4
  111.  
  112. ;    move.l    MyWindow(pc),a0
  113. ;    CALLINT CloseWindow
  114.  
  115. ;exit_closescr
  116. ;    move.l    MyScreen(pc),a0
  117. ;    CALLINT CloseScreen
  118.  
  119. ;exit_closeall
  120. ;    move.l    _GfxBase(pc),a1
  121. ;    CALLEXEC CloseLibrary
  122.  
  123. ;exit_closeint
  124. ;    move.l    _IntuitionBase(pc),a1
  125. ;    CALLEXEC CloseLibrary
  126.  
  127. ;done:
  128. ;    bra done
  129.  
  130.  move.l #PALETTEBIT,a0
  131.  move.l #COPIEDPAL+4,a1
  132.  move.w #255,d0
  133.  
  134. copydown:
  135.  move.b 1(a0),(a1)
  136.  move.b 3(a0),4(a1)
  137.  move.b 5(a0),8(a1)
  138.  add.w #6,a0
  139.  add.w #12,a1
  140.  dbra d0,copydown
  141.  
  142.  move.w #256,COPIEDPAL
  143.  move.w #0,COPIEDPAL+2
  144. LOOKFORME:
  145.  move.l MyScreen,a0
  146.  lea sc_ViewPort(a0),a0
  147.  move.l #COPIEDPAL,a1
  148.  move.l _GfxBase,a6
  149.  jsr -$372(a6)
  150.  
  151.  move.l MyScreen,a4
  152.  move.w sc_MouseX(a4),d0
  153.  move.w sc_MouseY(a4),d1
  154.  move.w d0,OLDXM
  155.  move.w d1,OLDYM
  156.     
  157.  move.l 4.w,a6
  158.  move.l #doslibname,a1
  159.  moveq #0,d0
  160.  jsr -552(a6)
  161.  move.l d0,doslib
  162.  
  163.  move.l doslib,a6
  164.  move.l #OBJNAME,d1
  165.  move.l #1005,d2
  166.  jsr -30(a6)
  167.  move.l d0,ROTATEDPTS
  168.  
  169.  move.l doslib,a6
  170.  move.l d0,d1
  171.  move.l #POLYGONDATA,d2
  172.  move.l #30000,d3
  173.  jsr -42(a6)
  174.  
  175.  move.l doslib,a6
  176.  move.l ROTATEDPTS,d1
  177.  jsr -36(a6)
  178.  
  179.     
  180. loop:
  181.  
  182.  move.l #POLYGONDATA,a3
  183.  move.w (a3)+,SORTIT
  184.  move.l a3,START_OF_OBJECT
  185.     
  186.  move.w (a3)+,num_points
  187.  move.w (a3)+,d6
  188.  move.w d6,num_frames
  189.  move.l a3,POINTER_TO_POINTERS
  190.  lea (a3,d6.w*4),a3
  191.  move.l a3,LinesPtr
  192.  moveq #0,d5
  193.  moveq #0,d2
  194.  
  195.  move.l POINTER_TO_POINTERS,a4
  196.  move.w (a4,d5.w*4),d2
  197.  add.l START_OF_OBJECT,d2
  198.  move.l d2,PtsPtr
  199.  move.w 2(a4,d5.w*4),d5
  200.  add.l START_OF_OBJECT,d5
  201.  move.l d5,PolyAngPtr
  202.  move.l d2,a3
  203.  move.w num_points,d5
  204.  
  205.  move.l (a3)+,OBJONOFF
  206.  
  207.  move.l a3,PointAngPtr
  208.  add.w d5,d5
  209.  move.w d5,d2
  210.  add.w d5,d5
  211.  add.w d5,d2
  212.  add.w d2,a3
  213.  move.l a3,PtsPtr
  214.  
  215.  move.l MyScreen,a4
  216.  move.w sc_MouseX(a4),d0
  217.  move.w sc_MouseY(a4),d1
  218.  
  219.  sub.w OLDXM,d0
  220.  sub.w OLDYM,d1
  221.  add.w d0,OLDXM
  222.  add.w d1,OLDYM
  223.  
  224.  btst #6,$bfe001
  225.  beq.s .SHIFTABOUT
  226.  
  227.  muls #8190,d0
  228.  divs #320,d0
  229.  add.w d0,YANG
  230.  and.w #8190,YANG
  231.  muls #8190,d1
  232.  divs #320,d1
  233.  and.w #8190,d1
  234.  add.w d1,XANG
  235.  and.w #8190,XANG
  236.  
  237. ; add.w #40,AANG
  238. ; add.w #70,BANG
  239. ; and.w #8191,AANG
  240. ; and.w #8191,BANG
  241.  
  242. ; add.w #60,CANG
  243. ; add.w #90,DANG
  244. ; and.w #8191,CANG
  245. ; and.w #8191,DANG
  246.  
  247.  
  248.  bra .ROTABOUT
  249. .SHIFTABOUT
  250.  
  251.   muls #8190,d0
  252.  divs #320,d0
  253.  add.w d0,BANG
  254.  and.w #8190,BANG
  255.  muls #8190,d1
  256.  divs #320,d1
  257.  and.w #8190,d1
  258.  add.w d1,AANG
  259.  and.w #8190,AANG
  260.  
  261.  
  262. .ROTABOUT
  263.  
  264.  move.w AANG,d1
  265.  move.w BANG,d3
  266. ; cmp.w #2,d6
  267. ; bne.s .notsecrot
  268. ; move.w CANG,d1
  269. ; move.w DANG,d3
  270. ;.notsecrot
  271.  move.l #SINETABLE,a1
  272.  move.w (a1,d1.w),XSIN    ;xsin
  273.  move.w (a1,d3.w),YSIN    ;ysin
  274.  
  275.  add.w #2048,a1
  276.  move.w (a1,d1.w),XCOS    ;xcos
  277.  move.w (a1,d3.w),YCOS    ;ycos
  278.  
  279.  move.w XANG,d1
  280.  move.w YANG,d3
  281. ; cmp.w #2,d6
  282. ; bne.s .notsecrot
  283. ; move.w CANG,d1
  284. ; move.w DANG,d3
  285. ;.notsecrot
  286.  move.l #SINETABLE,a1
  287.  move.w (a1,d1.w),XSIN2    ;xsin
  288.  move.w (a1,d3.w),YSIN2    ;ysin
  289.  
  290.  add.w #2048,a1
  291.  move.w (a1,d1.w),XCOS2    ;xcos
  292.  move.w (a1,d3.w),YCOS2    ;ycos
  293.  
  294.  
  295. ************************************************
  296. ************************************************
  297. ************************************************
  298. ************************************************
  299. ************************************************
  300. ************************************************
  301. ************************************************
  302. ************************************************
  303. ************************************************
  304. ************************************************
  305. ************************************************
  306. ************************************************
  307. ************************************************
  308. ************************************************
  309.  
  310. *SHADOW BUFFER CALCULATION
  311.  
  312.  
  313. ; First, calculate the normal brightnesses
  314. ; for points. NB: -1,-1,-1 = this point not used
  315. ; in gouraud shading.
  316.  
  317.  move.l #NORMBRIGHTS,a2
  318.  move.l PointAngPtr,a0
  319.  move.w num_points,d7
  320.  
  321.  move.l #NORMVECTS,a5
  322.  
  323.  subq #1,d7
  324.  
  325. CALCNORMBRIGHTS:
  326.  
  327.  move.w (a0)+,d0
  328.  move.w (a0)+,d1
  329.  move.w (a0)+,d2
  330.  
  331.  move.w #0,d6
  332.  
  333.  cmp.w #-1,d0
  334.  bne.s .notnot
  335.  cmp.w #-1,d1
  336.  bne.s .notnot
  337.  cmp.w #-1,d2
  338.  bne.s .notnot
  339.  
  340.  move.w #-1,x1
  341.  move.w #-1,y1
  342.  move.w #-1,z1
  343.  bra .dontbother
  344.  
  345. .notnot:
  346.  neg.w d1
  347.  
  348.  move.w d0,d3
  349.  move.w d2,d5
  350.  
  351.  muls YCOS,d0
  352.  muls YSIN,d2
  353.  sub.l d2,d0
  354.  add.l d0,d0
  355.  swap d0
  356. ; asr.l #6,d0    ; new x*512
  357.  
  358.  muls YSIN,d3
  359.  muls YCOS,d5
  360.  add.l d5,d3
  361.  add.l d3,d3
  362.  swap d3
  363.  move.w d3,d2    ; new z
  364.  
  365.  move.w d1,d4
  366.  move.w d2,d5
  367.  muls XCOS,d1
  368.  muls XSIN,d2
  369.  sub.l d2,d1
  370.  add.l d1,d1
  371.  swap d1
  372.  
  373.  muls XSIN,d4
  374.  muls XCOS,d5
  375.  add.l d5,d4
  376.  add.l d4,d4
  377.  swap d4
  378.  move.w d4,d2    ; new z
  379.  
  380.  
  381.  move.w d0,d3
  382.  move.w d2,d5
  383.  
  384.  muls YCOS2,d0
  385.  muls YSIN2,d2
  386.  sub.l d2,d0
  387.  add.l d0,d0
  388.  swap d0
  389.  
  390.  muls YSIN2,d3
  391.  muls YCOS2,d5
  392.  add.l d5,d3    
  393.  add.l d3,d3
  394.  swap d3
  395.  move.w d3,d2    ; new z
  396.  
  397.  move.w d1,d4
  398.  move.w d2,d5
  399.  muls XCOS2,d1
  400.  muls XSIN2,d2
  401.  sub.l d2,d1
  402.  add.l d1,d1
  403.  swap d1
  404.  
  405.  muls XSIN2,d4
  406.  muls XCOS2,d5
  407.  add.l d5,d4
  408.  add.l d4,d4
  409.  swap d4
  410.  
  411.  move.w d0,x1
  412.  move.w d1,y1
  413.  move.w d4,z1
  414.  
  415.  
  416.  move.w d1,d6    ; new y 
  417.  
  418.  asr.w #4,d6
  419.  add.w #20,d6
  420.  
  421.  ble.s .okokok
  422.  
  423.  moveq #0,d6
  424.  
  425. .okokok:
  426.  add.w #$1c,d6
  427.  bge.s .okokokok
  428.  moveq #0,d6
  429. .okokokok:
  430.  
  431.  add.w #64,d6
  432.  
  433. ; cmp.w #28,d6
  434. ; blt.s .okbig
  435. ; move.w #28,d6
  436. ;.okbig
  437.  
  438. .dontbother:
  439.  move.w x1,(a5)+
  440.  move.w y1,(a5)+
  441.  move.w z1,(a5)+
  442.  move.w d6,(a2)+
  443.  
  444.  dbra d7,CALCNORMBRIGHTS
  445.  
  446.  
  447. ; Next, calculate the point coords for
  448. ; the shadow buffer.
  449.  
  450.  move.l #SHADOWPTS,a2
  451.  move.l PtsPtr,a0
  452.  move.w num_points,d7
  453.  subq #1,d7
  454.  
  455. ROTPTLOPSHAD:
  456.  move.w (a0)+,d0
  457.  move.w d0,d3
  458.  move.w (a0)+,d1
  459.  move.w (a0)+,d2
  460.  move.w d2,d5
  461.  
  462.  muls YCOS,d0
  463.  muls YSIN,d2
  464.  sub.l d2,d0
  465.  add.l d0,d0
  466.  swap d0
  467. ; asr.l #6,d0    ; new x*512
  468.  
  469.  muls YSIN,d3
  470.  muls YCOS,d5
  471.  add.l d5,d3
  472.  add.l d3,d3
  473.  swap d3
  474.  move.w d3,d2    ; new z
  475.  
  476.  move.w d1,d4
  477.  move.w d2,d5
  478.  muls XCOS,d1
  479.  muls XSIN,d2
  480.  sub.l d2,d1
  481.  add.l d1,d1
  482.  swap d1
  483.  
  484.  muls XSIN,d4
  485.  muls XCOS,d5
  486.  add.l d5,d4
  487.  add.l d4,d4
  488.  swap d4
  489.  move.w d4,d2    ; new z
  490.   
  491.  move.w d0,d3
  492.  move.w d2,d5
  493.  
  494.  muls YCOS2,d0
  495.  muls YSIN2,d2
  496.  sub.l d2,d0
  497.  asr.l #6,d0    ; new x*512
  498.  
  499.  muls YSIN2,d3
  500.  muls YCOS2,d5
  501.  add.l d5,d3
  502.  add.l d3,d3
  503.  swap d3
  504.  move.w d3,d2    ; new z
  505.  
  506.  move.w d1,d4
  507.  move.w d2,d5
  508.  muls XCOS2,d1
  509.  muls XSIN2,d2
  510.  sub.l d2,d1
  511.  asr.l #6,d1    ; new y*512
  512.  
  513.  muls XSIN2,d4
  514.  muls XCOS2,d5
  515.  add.l d5,d4
  516.  add.l d4,d4
  517.  swap d4
  518.  move.w d4,d2    ; new z
  519.  
  520.  ext.l d2
  521.  
  522.  move.w XOFF,d5
  523.  ext.l d5
  524.  asl.l #8,d5
  525.  add.l d5,d5
  526.  add.l d5,d0
  527.  
  528.  move.l d0,(a2)+
  529.  move.l d1,(a2)+
  530.  move.w d2,(a2)+
  531.  
  532.  dbra d7,ROTPTLOPSHAD
  533.  
  534.  
  535.  
  536. ***************************************
  537. * Calculate viewer position for specularity..
  538.  
  539.  move.w #0,d0
  540.  move.w #0,d1
  541.  move.w #-1024,d2
  542.  
  543. ; move.w d0,d3
  544. ; move.w d2,d5
  545. ;
  546. ; muls YCOS,d0
  547. ; muls YSIN,d2
  548. ; sub.l d2,d0
  549. ; add.l d0,d0
  550. ; swap d0
  551. ; asr.l #6,d0    ; new x*512
  552. ; muls YSIN,d3
  553. ; muls YCOS,d5
  554. ; add.l d5,d3
  555. ; add.l d3,d3
  556. ; swap d3
  557. ; move.w d3,d2    ; new z
  558. ;
  559. ; move.w d1,d4
  560. ; move.w d2,d5
  561. ; muls XCOS,d1
  562. ; muls XSIN,d2
  563. ; sub.l d2,d1
  564. ; add.l d1,d1
  565. ; swap d1
  566. ; muls XSIN,d4
  567. ; muls XCOS,d5
  568. ; add.l d5,d4
  569. ; add.l d4,d4
  570. ; swap d4
  571. ; move.w d4,d2    ; new z
  572.  
  573.  move.w d0,d3
  574.  move.w d2,d5
  575.  
  576.  muls YCOS2,d0
  577.  muls YSIN2,d2
  578.  sub.l d2,d0
  579.  add.l d0,d0
  580.  swap d0
  581.  
  582.  muls YSIN2,d3
  583.  muls YCOS2,d5
  584.  add.l d5,d3    
  585.  add.l d3,d3
  586.  swap d3
  587.  move.w d3,d2    ; new z
  588.  
  589.  move.w d1,d4
  590.  move.w d2,d5
  591.  muls XCOS2,d1
  592.  muls XSIN2,d2
  593.  sub.l d2,d1
  594.  add.l d1,d1
  595.  swap d1
  596. ; asr.l #6,d1    ; new y*512
  597.  
  598.  muls XSIN2,d4
  599.  muls XCOS2,d5
  600.  add.l d5,d4
  601.  add.l d4,d4
  602.  swap d4
  603.  
  604.  move.w d0,x2b
  605.  move.w d1,y2b
  606.  move.w d4,z2b
  607.  
  608. ; Now the specular highlight efforts....
  609.  
  610.  move.l #SPECBRIGHTS,a2
  611.  move.l #NORMVECTS,a1
  612.  
  613.  move.l #SHADOWPTS,a5
  614.  
  615.  move.w num_points,d7
  616.  subq #1,d7
  617.  
  618. CALCSPECBRIGHTS:
  619.  
  620.  move.w (a1)+,x1
  621.  move.w (a1)+,y1
  622.  move.w (a1)+,z1
  623.  
  624.  move.w x2b,d0
  625.  move.l (a5)+,d1
  626.  asr.l #8,d1
  627.  asr.l #1,d1
  628.  sub.w d1,d0
  629.  move.w d0,x2
  630.  move.w y2b,d0
  631.  move.l (a5)+,d1
  632.  asr.l #8,d1
  633.  asr.l #1,d1
  634.  sub.w d1,d0
  635.  move.w d0,y2
  636.  move.w z2b,d0
  637.  sub.w (a5)+,d0
  638.  move.w d0,z2
  639.  
  640.  move.w #0,d6
  641.  
  642.  cmp.w #-1,x1
  643.  bne.s .notnot
  644.  cmp.w #-1,y1
  645.  bne.s .notnot
  646.  cmp.w #-1,z1
  647.  beq .dontbother
  648. .notnot: 
  649.  
  650.  move.w x2,d2
  651.  muls d2,d2
  652.  move.w y2,d1
  653.  muls d1,d1
  654.  add.l d1,d2
  655.  move.w z2,d1
  656.  muls d1,d1
  657.  add.l d1,d2
  658.  
  659.  jsr CALCSQROOT
  660.  
  661.  move.w d2,l2
  662.  
  663.  move.w y1,d0
  664.  muls z2,d0
  665.  move.w y2,d1
  666.  muls z1,d1
  667.  sub.l d1,d0    ; x4
  668.  
  669.  move.w z1,d1
  670.  muls x2,d1
  671.  move.w z2,d2
  672.  muls x1,d2
  673.  sub.l d2,d1    ; y4
  674.  
  675.  move.w x1,d2
  676.  muls y2,d2
  677.  move.w x2,d3
  678.  muls y1,d3
  679.  sub.l d3,d2    ; z4
  680.  
  681.  asr.l #8,d0
  682.  asr.l #8,d1
  683.  asr.l #8,d2
  684.  asr.l #2,d0
  685.  asr.l #2,d1
  686.  asr.l #2,d2
  687.  
  688.  move.w x1,d3
  689.  muls d1,d3
  690.  move.w y1,d4
  691.  muls d0,d4
  692.  sub.l d4,d3
  693.  asr.l #8,d3
  694.  asr.l #1,d3
  695.  add.w z2,d3
  696.  
  697.  muls #1024,d3
  698.  divs l2,d3
  699.  
  700.  move.w d3,z3
  701.  
  702.  move.w y1,d3
  703.  muls d2,d3
  704.  move.w z1,d4
  705.  muls d1,d4
  706.  sub.l d4,d3
  707.  asr.l #8,d3
  708.  asr.l #1,d3
  709.  add.w x2,d3
  710.  muls #1024,d3
  711.  divs l2,d3
  712.  
  713.  move.w d3,x3
  714.  
  715.  move.w z1,d3
  716.  muls d0,d3
  717.  move.w x1,d4
  718.  muls d2,d4
  719.  sub.l d4,d3
  720.  asr.l #8,d3
  721.  asr.l #1,d3
  722.  add.w y2,d3
  723.  muls #1024,d3
  724.  divs l2,d3
  725.  
  726.  move.w d3,y3
  727.  
  728.  move.w z3,d3
  729.  asr.w #3,d3
  730.  add.w #128,d3
  731.  bge.s .okpp
  732.  moveq #0,d3
  733. .okpp
  734.  cmp.w #255,d3
  735.  ble.s .okppp
  736.  move.w #255,d3
  737. .okppp
  738.  
  739.  move.b d3,d6
  740.  lsl.w #8,d6
  741.  
  742.  move.w x3,d3
  743.  asr.w #3,d3
  744.  
  745.  add.w #128,d3
  746.  bge.s .okp
  747.  moveq #0,d3
  748. .okp
  749.  cmp.w #255,d3
  750.  ble.s .okpppp
  751.  move.w #255,d3
  752. .okpppp
  753.  move.b d3,d6
  754.   
  755. ; add.w y2,d3
  756. ;
  757. ; move.w d3,d6
  758. ;
  759. ; asr.w #4,d6
  760. ; add.w #30,d6
  761. ; ble.s .okokok
  762. ; moveq #0,d6
  763. ;.okokok:
  764. ; add.w #$1c,d6
  765. ; bge.s .okokokok
  766. ; moveq #0,d6
  767. ;.okokokok:
  768.  
  769. ; cmp.w #28,d6
  770. ; blt.s .okbig
  771. ; move.w #28,d6
  772. ;.okbig
  773.  
  774. .dontbother:
  775.  move.w d6,(a2)+
  776.  move.w y3,(a2)+
  777.  
  778.  dbra d7,CALCSPECBRIGHTS
  779.  
  780.  
  781.  
  782.  
  783. * NOW THE POINTS FOR ON-SCREENNESS
  784.  
  785.  move.l #ROTATEDPTS,a2
  786.  move.l PtsPtr,a0
  787.  move.w num_points,d7
  788.  subq #1,d7
  789.  
  790. ROTPTLOP:
  791.  
  792.  move.w (a0)+,d0
  793.  move.w d0,d3
  794.  move.w (a0)+,d1
  795.  move.w (a0)+,d2
  796.  move.w d2,d5
  797.  
  798.  
  799.  
  800.  muls YCOS,d0
  801.  muls YSIN,d2
  802.  sub.l d2,d0
  803.  asr.l #6,d0    ; new x*512
  804.  
  805.  muls YSIN,d3
  806.  muls YCOS,d5
  807.  add.l d5,d3
  808.  add.l d3,d3
  809.  swap d3
  810.  move.w d3,d2    ; new z
  811.  
  812.  move.w d1,d4
  813.  move.w d2,d5
  814.  muls XCOS,d1
  815.  muls XSIN,d2
  816.  sub.l d2,d1
  817.  asr.l #6,d1    ; new y*512
  818.  
  819.  muls XSIN,d4
  820.  muls XCOS,d5
  821.  add.l d5,d4
  822.  add.l d4,d4
  823.  swap d4
  824.  move.w d4,d2    ; new z
  825.  
  826.  ext.l d2
  827.  
  828.  move.w XOFF,d5
  829.  ext.l d5
  830.  asl.l #8,d5
  831.  add.l d5,d5
  832.  add.l d5,d0
  833.  
  834.  move.l d0,(a2)+
  835.  move.l d1,(a2)+
  836.  move.w d2,(a2)+
  837.  
  838.  dbra d7,ROTPTLOP
  839.  
  840. ; Now convert the rotated points to the screen:
  841.  
  842.  move.l #ROTATEDPTS,a0
  843.  move.l #ONSCREENPTS,a2
  844.  move.w num_points,d7
  845.  subq #1,d7
  846. CONVERTTOSCREEN:
  847.  move.l (a0)+,d0
  848.  move.l (a0)+,d1
  849.  move.w (a0)+,d2
  850.  add.w ZOFF,d2
  851.  ext.l d2
  852.  
  853.  move.l d0,d3
  854.  asr.l #1,d3
  855.  add.l d3,d0 
  856.  move.l d1,d3
  857.  asr.l #1,d3
  858.  add.l d3,d1 
  859.  
  860.  divs d2,d0
  861.  divs d2,d1
  862.  add.w #160*4,d0
  863.  add.w #128*4,d1
  864.  move.w d0,(a2)+
  865.  move.w d1,(a2)+
  866.  dbra d7,CONVERTTOSCREEN
  867.  
  868.  move.w #254,HIGHPOLY
  869.  
  870.  move.l LinesPtr,a1
  871.  move.l #PartBuffer,a0
  872.  move.l a0,a2
  873.  move.w #15,d0
  874. clrpartbuffSHAD:
  875.  move.l #$80000001,(a2)+
  876.  move.l #$80000001,(a2)+
  877.  move.l #$80000001,(a2)+
  878.  move.l #$80000001,(a2)+
  879.  dbra d0,clrpartbuffSHAD
  880.  
  881.  move.l #SHADOWPTS,a2
  882.  move.l OBJONOFF,d5
  883.  
  884.  move.w #0,d4
  885.  tst.w SORTIT
  886.  bne.s PutInPartsSHAD
  887.  
  888.  
  889. putinunsortedSHAD:
  890.  move.w (a1)+,d7
  891.  blt doneallpartsSHAD
  892.  lsr.l #1,d5
  893.  bcs.s .yeson
  894.  addq #2,a1
  895.  bra putinunsortedSHAD
  896. .yeson:
  897.  
  898.  move.w (a1)+,d6
  899.  move.l #0,(a0)+
  900.  move.w d7,(a0)+
  901.  move.w d4,(a0)+
  902.  addq #1,d4
  903.  bra putinunsortedSHAD
  904.  
  905. PutInPartsSHAD
  906.  move.w (a1)+,d7
  907.  blt doneallpartsSHAD
  908.  
  909.  lsr.l #1,d5
  910.  bcs.s .yeson
  911.  addq #2,a1
  912.  bra PutInPartsSHAD
  913. .yeson:
  914.  
  915.  move.w (a1)+,d6
  916.  move.l 4(a2,d6.w),d0
  917.  add.l #200000,d0
  918.  
  919.  move.l #PartBuffer-8,a0
  920.  
  921. stillfrontSHAD
  922.  addq #8,a0
  923.  cmp.l (a0),d0
  924.  blt stillfrontSHAD
  925.  move.l #endparttab-8,a5
  926. domoreshiftSHAD:
  927.  move.l -8(a5),(a5)
  928.  move.l -4(a5),4(a5)
  929.  subq #8,a5
  930.  cmp.l a0,a5
  931.  bgt.s domoreshiftSHAD
  932.  
  933.  move.l d0,(a0)
  934.  move.w d7,4(a0)
  935.  move.w d4,6(a0)
  936.  addq #1,d4
  937.  bra PutInPartsSHAD
  938.  
  939. doneallpartsSHAD:
  940.  
  941.  move.l #PartBuffer,a0
  942.  
  943. PartLoopSHAD
  944.  move.l (a0)+,d7
  945.  blt nomorepartsSHAD
  946.  
  947.  move.l #SAVEHIGHS,a2
  948.  move.w 2(a0),d0
  949.  move.w HIGHPOLY,(a2,d0.w*2)
  950.  
  951.  moveq #0,d0
  952.  move.w (a0),d0
  953.  addq #4,a0
  954.  add.l START_OF_OBJECT,d0
  955.  move.l d0,a1
  956.  
  957. polylooSHAD:
  958.  
  959.  tst.w (a1)
  960.  blt.s nomorepolysSHAD
  961.  movem.l a0/a1/d7,-(a7)
  962.  bsr doaSHADEpoly
  963.  movem.l (a7)+,a0/a1/d7
  964.  
  965.  move.w (a1),d0
  966.  lea 18(a1,d0.w*4),a1
  967.  
  968.  bra.s polylooSHAD
  969. nomorepolysSHAD:
  970.  sub.w #1,HIGHPOLY
  971.  bra PartLoopSHAD
  972. nomorepartsSHAD:
  973.  
  974. *******************************************
  975. * Now the on-screen bit...
  976. *******************************************
  977.  
  978.  move.l LinesPtr,a1
  979.  move.l #PartBuffer,a0
  980.  move.l a0,a2
  981.  move.w #15,d0
  982. clrpartbuff:
  983.  move.l #$80000001,(a2)+
  984.  move.l #$80000001,(a2)+
  985.  move.l #$80000001,(a2)+
  986.  move.l #$80000001,(a2)+
  987.  dbra d0,clrpartbuff
  988.  
  989.  move.l #ROTATEDPTS,a2
  990.  move.l OBJONOFF,d5
  991.  
  992.  moveq #0,d4
  993.  
  994.  tst.w SORTIT
  995.  bne.s PutInParts
  996.  
  997. putinunsorted:
  998.  move.w (a1)+,d7
  999.  blt doneallparts
  1000.  lsr.l #1,d5
  1001.  bcs.s .yeson
  1002.  addq #2,a1
  1003.  bra putinunsorted
  1004. .yeson:
  1005.  
  1006.  move.w (a1)+,d6
  1007.  move.l #0,(a0)+
  1008.  move.w d7,(a0)+
  1009.  move.w d4,(a0)+
  1010.  
  1011.  addq #1,d4
  1012.  bra putinunsorted
  1013.  
  1014. PutInParts
  1015.  move.w (a1)+,d7
  1016.  blt doneallparts
  1017.  
  1018.  lsr.l #1,d5
  1019.  bcs.s .yeson
  1020.  addq #2,a1
  1021.  bra PutInParts
  1022. .yeson:
  1023.  
  1024.  move.w (a1)+,d6
  1025.  move.l (a2,d6.w),d0
  1026.  asr.l #8,d0
  1027.  asr.l #2,d0
  1028.  muls d0,d0
  1029.  move.l 4(a2,d6.w),d2
  1030.  asr.l #8,d2
  1031.  asr.l #2,d2
  1032.  muls d2,d2
  1033.  add.l d2,d0 
  1034.  move.w 8(a2,d6.w),d2
  1035.  add.w #1024,d2
  1036.  muls d2,d2
  1037.  add.l d2,d0
  1038.  
  1039.  move.l #PartBuffer-8,a0
  1040.  
  1041. stillfront
  1042.  addq #8,a0
  1043.  cmp.l (a0),d0
  1044.  blt stillfront
  1045.  move.l #endparttab-8,a5
  1046. domoreshift:
  1047.  move.l -8(a5),(a5)
  1048.  move.l -4(a5),4(a5)
  1049.  subq #8,a5
  1050.  cmp.l a0,a5
  1051.  bgt.s domoreshift
  1052.  
  1053.  move.l d0,(a0)
  1054.  move.w d7,4(a0)
  1055.  move.w d4,6(a0)
  1056.  addq #1,d4
  1057.  bra PutInParts
  1058.  
  1059. doneallparts:
  1060.  
  1061.  move.l #PartBuffer,a0
  1062.  
  1063. PartLoop
  1064.  move.l (a0)+,d7
  1065.  blt nomoreparts
  1066.  
  1067.  move.l #SAVEHIGHS,a2
  1068.  move.w 2(a0),d0
  1069.  move.w (a2,d0.w*2),HIGHPOLY
  1070.  
  1071.  moveq #0,d0
  1072.  move.w (a0),d0
  1073.  addq #4,a0
  1074.  add.l START_OF_OBJECT,d0
  1075.  move.l d0,a1
  1076.  
  1077. polyloo:
  1078.  
  1079.  tst.w (a1)
  1080.  blt.s nomorepolys
  1081.  movem.l a0/a1/d7,-(a7)
  1082.  bsr doapoly
  1083.  movem.l (a7)+,a0/a1/d7
  1084.  
  1085.  move.w (a1),d0
  1086.  lea 18(a1,d0.w*4),a1
  1087.  
  1088.  bra.s polyloo
  1089. nomorepolys:
  1090.  sub.w #1,HIGHPOLY
  1091.  bra PartLoop
  1092. nomoreparts:
  1093.  
  1094. NOPOLYS:
  1095.  
  1096. ; btst #6,$bfe001
  1097. ; beq.s .SHOWSHADOW
  1098.  
  1099.  move.l FASTBUFFER,a0
  1100.  add.l #40*320+64,a0
  1101.  move.l #RAWSCRN+40*40+8,a1
  1102.  move.l #(24)-1,d0
  1103.  move.l #175,d1
  1104.  move.w #128,d2
  1105.  move.w #16,d3
  1106.  moveq #0,d4
  1107.  moveq #0,d5
  1108.  jsr CHUNKYTOPLANAR 
  1109.  
  1110.  bra .SHOWNSCRN
  1111.  
  1112. .SHOWSHADOW
  1113.  
  1114.  move.l #SHADOWBUFFER,a0
  1115.  add.l #40*256,a0
  1116.  move.l #RAWSCRN+40*40,a1
  1117.  move.l #(256/8)-1,d0
  1118.  move.l #175,d1
  1119.  move.w #0,d2
  1120.  move.w #8,d3
  1121.  moveq #0,d4
  1122.  moveq #0,d5
  1123.  jsr CHUNKYTOPLANAR 
  1124.  
  1125. .SHOWNSCRN:
  1126.  
  1127.  move.l FASTBUFFER,a0
  1128.  move.l #NEBBIE,a1
  1129.  add.l #40*320+64,a0
  1130.  
  1131.  move.w #175,d0
  1132. clrchunk:
  1133.  move.l (a1)+,(a0)+
  1134.  move.l (a1)+,(a0)+
  1135.  move.l (a1)+,(a0)+
  1136.  move.l (a1)+,(a0)+
  1137.  move.l (a1)+,(a0)+
  1138.  move.l (a1)+,(a0)+
  1139.  move.l (a1)+,(a0)+
  1140.  move.l (a1)+,(a0)+
  1141.  move.l (a1)+,(a0)+
  1142.  move.l (a1)+,(a0)+
  1143.  move.l (a1)+,(a0)+
  1144.  move.l (a1)+,(a0)+
  1145.  move.l (a1)+,(a0)+
  1146.  move.l (a1)+,(a0)+
  1147.  move.l (a1)+,(a0)+
  1148.  move.l (a1)+,(a0)+
  1149.  move.l (a1)+,(a0)+
  1150.  move.l (a1)+,(a0)+
  1151.  move.l (a1)+,(a0)+
  1152.  move.l (a1)+,(a0)+
  1153.  move.l (a1)+,(a0)+
  1154.  move.l (a1)+,(a0)+
  1155.  move.l (a1)+,(a0)+
  1156.  move.l (a1)+,(a0)+
  1157.  move.l (a1)+,(a0)+
  1158.  move.l (a1)+,(a0)+
  1159.  move.l (a1)+,(a0)+
  1160.  move.l (a1)+,(a0)+
  1161.  move.l (a1)+,(a0)+
  1162.  move.l (a1)+,(a0)+
  1163.  move.l (a1)+,(a0)+
  1164.  move.l (a1)+,(a0)+
  1165.  move.l (a1)+,(a0)+
  1166.  move.l (a1)+,(a0)+
  1167.  move.l (a1)+,(a0)+
  1168.  move.l (a1)+,(a0)+
  1169.  move.l (a1)+,(a0)+
  1170.  move.l (a1)+,(a0)+
  1171.  move.l (a1)+,(a0)+
  1172.  move.l (a1)+,(a0)+
  1173.  move.l (a1)+,(a0)+
  1174.  move.l (a1)+,(a0)+
  1175.  move.l (a1)+,(a0)+
  1176.  move.l (a1)+,(a0)+
  1177.  move.l (a1)+,(a0)+
  1178.  move.l (a1)+,(a0)+
  1179.  move.l (a1)+,(a0)+
  1180.  move.l (a1)+,(a0)+
  1181.  add.w #(320-192),a0
  1182.  dbra d0,clrchunk
  1183.  
  1184.  move.l #SHADOWBUFFER,a0
  1185.  move.l #-1,d1
  1186.  move.l #-1,d2
  1187.  move.w #15,d0
  1188. ;clrshad:
  1189. ; move.w #15,d5
  1190. ;innner
  1191. ; move.l d2,(a0)+
  1192. ; move.l d2,(a0)+
  1193. ; move.l d2,(a0)+
  1194. ; move.l d2,(a0)+
  1195. ; move.l d1,(a0)+
  1196. ; move.l d1,(a0)+
  1197. ; move.l d1,(a0)+
  1198. ; move.l d1,(a0)+
  1199. ; move.l d2,(a0)+
  1200. ; move.l d2,(a0)+
  1201. ; move.l d2,(a0)+
  1202. ; move.l d2,(a0)+
  1203. ; move.l d1,(a0)+
  1204. ; move.l d1,(a0)+
  1205. ; move.l d1,(a0)+
  1206. ; move.l d1,(a0)+
  1207. ; move.l d2,(a0)+
  1208. ; move.l d2,(a0)+
  1209. ; move.l d2,(a0)+
  1210. ; move.l d2,(a0)+
  1211. ; move.l d1,(a0)+
  1212. ; move.l d1,(a0)+
  1213. ; move.l d1,(a0)+
  1214. ; move.l d1,(a0)+
  1215. ; move.l d2,(a0)+
  1216. ; move.l d2,(a0)+
  1217. ; move.l d2,(a0)+
  1218. ; move.l d2,(a0)+
  1219. ; move.l d1,(a0)+
  1220. ; move.l d1,(a0)+
  1221. ; move.l d1,(a0)+
  1222. ; move.l d1,(a0)+
  1223. ; move.l d2,(a0)+
  1224. ; move.l d2,(a0)+
  1225. ; move.l d2,(a0)+
  1226. ; move.l d2,(a0)+
  1227. ; move.l d1,(a0)+
  1228. ; move.l d1,(a0)+
  1229. ; move.l d1,(a0)+
  1230. ; move.l d1,(a0)+
  1231. ; move.l d2,(a0)+
  1232. ; move.l d2,(a0)+
  1233. ; move.l d2,(a0)+
  1234. ; move.l d2,(a0)+
  1235. ; move.l d1,(a0)+
  1236. ; move.l d1,(a0)+
  1237. ; move.l d1,(a0)+
  1238. ; move.l d1,(a0)+
  1239. ; move.l d2,(a0)+
  1240. ; move.l d2,(a0)+
  1241. ; move.l d2,(a0)+
  1242. ; move.l d2,(a0)+
  1243. ; move.l d1,(a0)+
  1244. ; move.l d1,(a0)+
  1245. ; move.l d1,(a0)+
  1246. ; move.l d1,(a0)+
  1247. ; move.l d2,(a0)+
  1248. ; move.l d2,(a0)+
  1249. ; move.l d2,(a0)+
  1250. ; move.l d2,(a0)+
  1251. ; move.l d1,(a0)+
  1252. ; move.l d1,(a0)+
  1253. ; move.l d1,(a0)+
  1254. ; move.l d1,(a0)+
  1255. ; dbra d5,innner
  1256. ; exg d1,d2
  1257. ;
  1258. ; dbra d0,clrshad
  1259.  
  1260.  
  1261.  
  1262.     btst #7,$bfe001
  1263.     beq.s exit_closescr
  1264.  
  1265.  
  1266.     add.l #$8000,lmxoff
  1267.     cmp.l #40*65536,lmxoff
  1268.     blt.s .oksm
  1269.     sub.l #40*65536,lmxoff    
  1270. .oksm
  1271.  
  1272.     bra loop
  1273.     
  1274. lmxoff: dc.l 0
  1275.  
  1276. exit_closescr
  1277.     move.l    MyScreen(pc),a0
  1278.     CALLINT CloseScreen
  1279.  
  1280. exit_closeall
  1281.     move.l    _GfxBase(pc),a1
  1282.     CALLEXEC CloseLibrary
  1283.  
  1284. exit_closeint
  1285.     move.l    _IntuitionBase(pc),a1
  1286.     CALLEXEC CloseLibrary
  1287.  
  1288. exit_false
  1289.     move.l    #0,d0                return code
  1290.     rts
  1291.  
  1292. TESTTAB: ds.w 30
  1293.  
  1294. ************************************************
  1295. * SUBROUTINES HERE. ****************************
  1296. ************************************************
  1297.  
  1298. **********************************************************
  1299.  
  1300. * the definition of the screen - note that in assembler you
  1301. * MUST get the sizes of these fields correct, by consulting either
  1302. * the RKM or the header files
  1303.  
  1304.  
  1305. MyNewScreen    dc.w    0,0        left, top
  1306.         dc.w    320,256        width, height
  1307.         dc.w    8        depth
  1308.         dc.b    0,1        pens
  1309.         dc.w    0        viewmodes
  1310.         dc.w    CUSTOMSCREEN    type
  1311.         dc.l    MyFont        font
  1312.         dc.l    screen_title    title
  1313.         dc.l    0        gadgets
  1314.         dc.l    0        bitmap
  1315.  
  1316. * my font definition
  1317. MyFont    dc.l    font_name
  1318.     dc.w    TOPAZ_SIXTY
  1319.     dc.b    FS_NORMAL
  1320.     dc.b    FPF_ROMFONT
  1321.  
  1322. * the variables
  1323. _IntuitionBase    dc.l    0        Intuition lib pointer
  1324. _GfxBase    dc.l    0        graphics lib pointer
  1325. MyScreen        dc.l    0
  1326. MyWindow        dc.l    0
  1327. MyNewWindow    ds.b    nw_SIZE        a buffer
  1328.  
  1329.  
  1330. * some strings
  1331. int_name    INTNAME
  1332. graf_name    GRAFNAME
  1333. hello_message    dc.b    'Hello World'
  1334.  
  1335. * these are C strings, so have to be null terminated
  1336. screen_title    dc.b    'My Own Screen',0
  1337. font_name    dc.b    'topaz.font',0
  1338. window_title    dc.b    'A Simple Window',0
  1339.  
  1340.  even
  1341.  
  1342.  
  1343. doaSHADEpoly:
  1344.  
  1345.  move.w (a1)+,d7    ; sides to draw
  1346.  addq #2,a1        ; avoid holes
  1347.  
  1348.  move.l #SHADOWPTS,a3
  1349.  
  1350.  move.w (a1),d0
  1351.  move.w 4(a1),d1
  1352.  move.w 8(a1),d2
  1353.  muls #10,d0
  1354.  muls #10,d1
  1355.  muls #10,d2
  1356.  move.w 8(a3,d0.w),d3
  1357.  move.w 8(a3,d1.w),d4
  1358.  move.w 8(a3,d2.w),d5
  1359.  move.l (a3,d0.w),d0
  1360.  move.l (a3,d1.w),d1
  1361.  move.l (a3,d2.w),d2
  1362.  asr.l #8,d0
  1363.  asr.l #8,d1
  1364.  asr.l #8,d2
  1365.  asr.l #1,d0
  1366.  asr.l #1,d1
  1367.  asr.l #1,d2
  1368.  
  1369.  sub.w d1,d0
  1370.  sub.w d1,d2
  1371.  sub.w d4,d3
  1372.  sub.w d4,d5
  1373.  muls d3,d2
  1374.  muls d5,d0
  1375.  sub.l d0,d2
  1376.  bge SHADpolybehind
  1377.  
  1378.  move.w #20000,d4    ; top
  1379.  move.w #-20000,d5    ; bottom
  1380.  move.l #UVCOORDS,a4
  1381.  
  1382. putinlinesSHAD:
  1383.  move.w (a1),d0
  1384.  move.w 4(a1),d1
  1385.  
  1386.  moveq #0,d2
  1387.  move.b 2(a1),d2    ; one end U
  1388.  move.w d2,2(a4,d0.w*4)
  1389.  move.b 3(a1),d2    ; one end V
  1390.  move.w d2,(a4,d0.w*4)
  1391.  move.b 6(a1),d2    ; two end U
  1392.  move.w d2,2(a4,d1.w*4)
  1393.  move.b 7(a1),d2    ; two end V
  1394.  move.w d2,(a4,d1.w*4)
  1395.  
  1396.  move.w d0,d2
  1397.  muls #10,d2
  1398.  move.w 8(a3,d2.w),d2    ; Z
  1399.  
  1400.  cmp.w d2,d4
  1401.  ble.s .oktop
  1402.  move.w d2,d4
  1403. .oktop
  1404.  cmp.w d2,d5
  1405.  bge.s .okbot
  1406.  move.w d2,d5
  1407. .okbot
  1408.  
  1409.  movem.l d4/d5/d7/a1/a3/a4,-(a7)
  1410.  bsr SIMPLESHADLINE
  1411.  movem.l (a7)+,d4/d5/d7/a1/a3/a4
  1412.  addq #4,a1
  1413.  dbra d7,putinlinesSHAD
  1414.  addq #4,a1
  1415.   
  1416.  move.w (a1)+,TEXTUREADD
  1417.  
  1418.  asr.w #2,d4
  1419.  asr.w #2,d5
  1420.  add.w #128,d4
  1421.  add.w #128,d5
  1422.  move.w d4,TOPLINE
  1423.  move.w d5,BOTLINE
  1424.  
  1425. * Now draw the shadow polygon....
  1426.  
  1427.  move.l #SHADOWBUFFER,a2
  1428.  move.l #LEFTUVS,a0
  1429.  move.w TOPLINE,d0
  1430.  move.w BOTLINE,d1
  1431.  sub.w d0,d1
  1432.  asl.w #3,d0
  1433.  add.w d0,a0
  1434.  muls #(256/8),d0
  1435.  add.l d0,a2    ; pointer to screen line.
  1436.  
  1437.  subq #1,d1
  1438.  blt NOPOLYGONSHAD
  1439.  
  1440. DOAHORLINESHAD:
  1441.  swap d1
  1442.  
  1443.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1444.  move.w (a0)+,d7
  1445.  sub.w d7,d0
  1446.  blt NOPOLYGONSHAD
  1447.  
  1448.  move.l a2,-(a7)
  1449.  
  1450. ; asr.w #2,d0
  1451. ; asr.w #2,d7
  1452.  add.w d7,a2
  1453.  ext.l d0
  1454.  addq #1,d0
  1455.  
  1456.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1457.  move.w (a0)+,d4
  1458.  swap d7
  1459.  clr.w d7
  1460.  swap d4
  1461.  clr.w d4
  1462.  sub.l d4,d7
  1463.  divs.l d0,d7
  1464.  move.l d7,a5
  1465.  
  1466.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1467.  swap d7
  1468.  clr.w d7
  1469.  move.w (a0)+,d5
  1470.  swap d5
  1471.  clr.w d5
  1472.  sub.l d5,d7
  1473.  divs.l d0,d7
  1474.  move.l d7,a6
  1475.  
  1476.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1477.  swap d7
  1478.  clr.w d7
  1479.  move.w (a0)+,d6
  1480.  swap d6
  1481.  clr.w d6
  1482.  sub.l d6,d7
  1483.  divs.l d0,d7
  1484.  move.l d7,a3
  1485.  
  1486.  move.l a0,-(a7)
  1487.  move.l d1,-(a7)
  1488.  move.l #TEXTURES,a0
  1489.  move.w TEXTUREADD,d7
  1490.  bge.s .okaddtes3
  1491.  and.w #$7fff,d7
  1492.  add.l #65536*2,a0
  1493. .okaddtes3:
  1494.  ext.l d7
  1495.  add.l d7,d7
  1496.  add.l d7,a0
  1497.  move.w #0,d7
  1498.  
  1499.  subq #1,d0
  1500.  
  1501. ; d0=xdist
  1502. ; d4=U  a5=DU
  1503. ; d5=V  a6=DV
  1504. ; d6=Y  a3=DY
  1505.  moveq #0,d1
  1506.  
  1507.  swap d6
  1508.  
  1509. PLOTADOT:
  1510.  
  1511. .across
  1512.  
  1513.  swap d4
  1514.  swap d5
  1515.  move.w d4,d2
  1516.  lsl.w #8,d2
  1517.  swap d4
  1518.  move.b d5,d2
  1519.  add.l a5,d4
  1520.  swap d5
  1521.  add.l a6,d5
  1522.  
  1523.  
  1524. ; swap d6
  1525. ; move.b (a2)+,d1
  1526. ; tst.b 1(a0,d2.w*8)
  1527. ; beq.s .noplottt
  1528.  move.b d6,(a2)+
  1529.  
  1530.  dbra d0,.across
  1531.  bra.s .plaster
  1532.  
  1533. .noplottt:
  1534.  addq #1,a2
  1535.  dbra d0,.across
  1536.  
  1537. .plaster:
  1538.  
  1539.  move.l (a7)+,d1
  1540.  move.l (a7)+,a0
  1541.  move.l (a7)+,a2
  1542.  
  1543. .noline:
  1544.  add.w #256,a2
  1545.  
  1546.  swap d1
  1547.  dbra d1,DOAHORLINESHAD
  1548.  
  1549. NOPOLYGONSHAD:
  1550.  
  1551. SHADpolybehind:
  1552.  rts
  1553.  
  1554.  
  1555. ************************************************
  1556.  
  1557. LU: dc.w 0
  1558. LV: dc.w 0
  1559. RU: dc.w 0
  1560. RV: dc.w 0
  1561.     
  1562. SIMPLESHADLINE:
  1563.  move.l #SHADOWPTS,a1
  1564.  
  1565.  move.l #UVCOORDS,a2
  1566.  move.w (a2,d0.w*4),LU
  1567.  move.w 2(a2,d0.w*4),LV
  1568.  move.w (a2,d1.w*4),RU
  1569.  move.w 2(a2,d1.w*4),RV
  1570.  
  1571.  muls #10,d0
  1572.  muls #10,d1
  1573.  move.w 8(a1,d0.w),d2        ;fz
  1574.  move.w 8(a1,d1.w),d7        ;sz
  1575.  ext.l d2
  1576.  ext.l d7
  1577.  
  1578.  move.l #LEFTUVS,a3
  1579.  asr.l #2,d2
  1580.  asr.l #2,d7
  1581.  cmp.l d2,d7 
  1582.  beq .noline
  1583.  
  1584.  bgt.s .lineonright
  1585. .lineonleft:
  1586.  move.l #RIGHTUVS,a3
  1587.  exg d0,d1
  1588.  exg d2,d7
  1589.  
  1590.  move.l LU,d5
  1591.  move.l RU,LU
  1592.  move.l d5,RU
  1593.  
  1594. .lineonright:
  1595.  
  1596.  sub.w d2,d7
  1597.  add.w #128,d2
  1598.  lea (a3,d2.w*8),a3
  1599.  
  1600.  move.w d7,YDIFF
  1601.  
  1602.  move.l (a1,d0.w),d3        ;fx
  1603.  move.l (a1,d1.w),d7        ;sx
  1604.  
  1605.  asl.l #5,d3
  1606.  asl.l #5,d7
  1607.  
  1608.  sub.l d3,d7
  1609.  divs.l YDIFF-2,d7
  1610.  move.l d7,a0    ; dx
  1611.  
  1612.  move.l #ROTATEDPTS,a1
  1613.  
  1614.  move.w LU,d4
  1615.  move.w LV,d5
  1616.  move.w RU,d6
  1617.  move.w RV,d7
  1618.  
  1619.  sub.w d4,d6
  1620.  sub.w d5,d7
  1621.  swap d4
  1622.  swap d5
  1623.  clr.w d4
  1624.  clr.w d5
  1625.  swap d6
  1626.  swap d7
  1627.  clr.w d6
  1628.  clr.w d7
  1629.  
  1630.  divs.l YDIFF-2,d6
  1631.  divs.l YDIFF-2,d7
  1632.  
  1633.  move.l d6,a4
  1634.  move.l d7,a5
  1635.  
  1636. ; asl.w #4,d0
  1637. ; asl.w #4,d1
  1638.  
  1639.  move.l 4(a1,d0.w),d6
  1640.  move.l 4(a1,d1.w),d7
  1641.  asl.l #5,d6
  1642.  asl.l #5,d7
  1643.  sub.l d6,d7
  1644.  divs.l YDIFF-2,d7
  1645.  exg d7,a6
  1646.  exg d7,d6
  1647.  
  1648.  move.l YDIFF-2,d1
  1649.  subq #1,d1
  1650.  
  1651. ; d3=x a0=dx
  1652. ; d4=u a4=du
  1653. ; d5=v a5=dv
  1654. ; d7=y a6=dy
  1655. ; d1=dz
  1656.  
  1657.  move.w HIGHPOLY,d7
  1658.  
  1659.  add.l #128*65536,d3
  1660. ; add.l #128*65536,d7
  1661.  
  1662. .PUTINLINE:
  1663.  swap d3
  1664.  move.w d3,(a3)+
  1665.  swap d3
  1666.  add.l a0,d3
  1667.  swap d4
  1668.  move.w d4,(a3)+
  1669.  swap d4
  1670.  swap d5
  1671.  add.l a4,d4
  1672.  move.w d5,(a3)+
  1673.  swap d5
  1674.  add.l a5,d5
  1675. ; swap d7
  1676.  move.w d7,(a3)+
  1677. ; swap d7
  1678. ; add.l a6,d7
  1679.  dbra d1,.PUTINLINE
  1680.  
  1681. .noline:
  1682.  rts
  1683.  
  1684.  
  1685. **************************************************
  1686.  
  1687. doapoly:
  1688.  
  1689.  move.w (a1)+,d7    ; sides to draw
  1690.  addq #2,a1        ; avoid holes
  1691.  move.w 12(a1,d7.w*4),pregour
  1692.  
  1693.  move.l #ONSCREENPTS,a3
  1694.  
  1695.  move.w (a1),d0
  1696.  move.w 4(a1),d1
  1697.  move.w 8(a1),d2
  1698.  move.w 2(a3,d0.w*4),d3
  1699.  move.w 2(a3,d1.w*4),d4
  1700.  move.w 2(a3,d2.w*4),d5
  1701.  move.w (a3,d0.w*4),d0
  1702.  move.w (a3,d1.w*4),d1
  1703.  move.w (a3,d2.w*4),d2
  1704.  
  1705.  sub.w d1,d0
  1706.  sub.w d1,d2
  1707.  sub.w d4,d3
  1708.  sub.w d4,d5
  1709.  muls d3,d2
  1710.  muls d5,d0
  1711.  sub.l d0,d2
  1712.  ble polybehind
  1713.  
  1714.  move.w #20000,d4    ; top
  1715.  move.w #-20000,d5    ; bottom
  1716.  move.l #UVCOORDS,a4
  1717.  
  1718.  move.l a1,a0
  1719.  
  1720. putinlines:
  1721.  move.w (a1),d0
  1722.  move.w 4(a1),d1
  1723.  
  1724.  moveq #0,d2
  1725.  move.b 2(a1),d2    ; one end U
  1726.  move.w d2,2(a4,d0.w*4)
  1727.  move.b 3(a1),d2    ; one end V
  1728.  move.w d2,(a4,d0.w*4)
  1729.  move.b 6(a1),d2    ; two end U
  1730.  move.w d2,2(a4,d1.w*4)
  1731.  move.b 7(a1),d2    ; two end V
  1732.  move.w d2,(a4,d1.w*4)
  1733.  
  1734.  move.w 2(a3,d0.w*4),d2    ; Z
  1735.  
  1736.  cmp.w d2,d4
  1737.  ble.s .oktop
  1738.  move.w d2,d4
  1739. .oktop
  1740.  cmp.w d2,d5
  1741.  bge.s .okbot
  1742.  move.w d2,d5
  1743. .okbot
  1744.  
  1745.  movem.l a0/d4/d5/d7/a1/a3/a4,-(a7)
  1746.  jsr SIMPLECALCLINE
  1747.  movem.l (a7)+,a0/d4/d5/d7/a1/a3/a4
  1748.  addq #4,a1
  1749.  dbra d7,putinlines
  1750.  addq #4,a1 
  1751.  
  1752.  move.w (a1)+,TEXTUREADD
  1753.  
  1754.  asr.w #2,d4
  1755.  asr.w #2,d5
  1756. ; add.w #128,d4
  1757. ; add.w #128,d5
  1758.  move.w d4,TOPLINE
  1759.  move.w d5,BOTLINE
  1760.   
  1761.  move.l #SHADOWPTS,a1
  1762.  move.w (a0),d0
  1763.  move.w 4(a0),d1
  1764.  move.w 8(a0),d2
  1765.  
  1766. CHECKVALS:
  1767.  
  1768.  muls #10,d0
  1769.  muls #10,d1
  1770.  muls #10,d2
  1771.  
  1772.  lea (a1,d0.w),a0
  1773.  lea (a1,d2.w),a2
  1774.  lea (a1,d1.w),a1
  1775.  
  1776.  move.l (a0),d3
  1777.  sub.l (a1),d3
  1778.  asr.l #8,d3
  1779.  asr.l #1,d3
  1780.  move.l 4(a0),d4
  1781.  sub.l 4(a1),d4
  1782.  asr.l #8,d4
  1783.  asr.l #1,d4
  1784.  move.w 8(a0),d5
  1785.  sub.w 8(a1),d5
  1786.  
  1787.  move.w d3,d6
  1788.  muls d6,d6
  1789.  move.w d4,d7
  1790.  muls d7,d7
  1791.  add.l d7,d6
  1792.  move.w d5,d7
  1793.  muls d7,d7
  1794.  add.l d7,d6
  1795.  move.l d6,d2
  1796.  jsr CALCSQROOT
  1797.  move.w d2,LEN1
  1798.  
  1799.  move.l (a2),d0
  1800.  sub.l (a1),d0
  1801.  asr.l #8,d0
  1802.  asr.l #1,d0
  1803.  move.l 4(a2),d1
  1804.  sub.l 4(a1),d1
  1805.  asr.l #8,d1
  1806.  asr.l #1,d1
  1807.  move.w 8(a2),d2
  1808.  sub.w 8(a1),d2
  1809.  
  1810.  muls d2,d3
  1811.  muls d0,d5
  1812.  sub.l d3,d5    ; length
  1813.  asr.l #8,d5
  1814.  muls #$4c,d5
  1815.  ext.l d5
  1816.  asl.l #8,d5
  1817.  
  1818.  muls d0,d0
  1819.  muls d1,d1
  1820.  muls d2,d2
  1821.  add.l d0,d1
  1822.  add.l d1,d2
  1823.  jsr CALCSQROOT
  1824.  
  1825.  muls LEN1,d2
  1826.  bgt.s .ok
  1827.  moveq #1,d2
  1828. .ok
  1829.  
  1830.  divs.l d2,d5
  1831.  
  1832.  add.l #16,d5
  1833.  
  1834.  tst.l d5
  1835.  ble.s .okbr
  1836.  moveq #0,d5
  1837. .okbr:
  1838.  add.w #$5c,d5
  1839.  bge.s .okbr2
  1840.  moveq #0,d5
  1841. .okbr2:
  1842.  
  1843.  move.w d5,d0
  1844.  
  1845.  asl.w #8,d5
  1846.  move.w d5,BRIGHTNESS+2
  1847.  
  1848.  sub.w #$5c,d0
  1849.  asr.w #1,d0
  1850.  add.w #$5c,d0
  1851.  asl.w #8,d0
  1852.  move.w d0,BRIGHTNESS
  1853.  
  1854.  
  1855. ***********************************************
  1856. * Draw the polygon (shadowed).
  1857.  
  1858.  move.l FASTBUFFER,a2
  1859.  move.l #LEFTUVS,a0
  1860.  move.w TOPLINE,d0
  1861.  move.w BOTLINE,d1
  1862.  sub.w d0,d1
  1863.  asl.w #4,d0
  1864.  add.w d0,a0
  1865.  muls #(320/16),d0
  1866.  add.l d0,a2    ; pointer to screen line.
  1867.  
  1868.  subq #1,d1
  1869.  blt NOPOLYGON
  1870.  
  1871.  tst.b Gouraud
  1872.  bne GOURPOLY
  1873.  
  1874. DOAHORLINE:
  1875.  swap d1
  1876.  
  1877.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1878.  move.w (a0)+,d7
  1879.  asr.w #2,d0
  1880.  asr.w #2,d7
  1881.  sub.w d7,d0
  1882.  bge.s .okflibble
  1883.  
  1884.  add.w #14,a0
  1885.  add.w #320,a2
  1886.  swap d1
  1887.  dbra d1,DOAHORLINE
  1888.  bra NOPOLYGON
  1889.  
  1890. .okflibble:
  1891.  
  1892.  move.l a2,-(a7)
  1893.  
  1894.  add.w d7,a2
  1895.  ext.l d0
  1896.  addq #1,d0
  1897.  
  1898.  move.l RIGHTUVS-LEFTUVS(a0),d7
  1899.  move.l (a0)+,d2 
  1900.  sub.l d2,d7
  1901.  divs.l d0,d7
  1902.  move.l d7,a1
  1903.  
  1904.  
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  move.l RIGHTUVS-LEFTUVS(a0),d7 
  1922.  move.l (a0)+,d3 
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  sub.l d3,d7
  1944.  divs.l d0,d7
  1945.  move.l d7,a4
  1946.  
  1947.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1948.  move.w (a0)+,d4
  1949.  swap d7
  1950.  clr.w d7
  1951.  swap d4
  1952.  clr.w d4
  1953.  sub.l d4,d7
  1954.  divs.l d0,d7
  1955.  move.l d7,a5
  1956.  
  1957.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1958.  swap d7
  1959.  clr.w d7
  1960.  move.w (a0)+,d5
  1961.  swap d5
  1962.  clr.w d5
  1963.  sub.l d5,d7
  1964.  divs.l d0,d7
  1965.  move.l d7,a6
  1966.  
  1967.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1968.  swap d7
  1969.  clr.w d7
  1970.  move.w (a0)+,d6
  1971.  swap d6
  1972.  clr.w d6
  1973.  sub.l d6,d7
  1974.  divs.l d0,d7
  1975.  move.l d7,a3
  1976.  
  1977.  move.l a0,-(a7)
  1978.  move.l d1,-(a7)
  1979.  move.l #TEXTURES,a0
  1980.  move.w TEXTUREADD,d7
  1981.  bge.s .okaddtes3
  1982.  and.w #$7fff,d7
  1983.  add.l #65536*2,a0
  1984. .okaddtes3:
  1985.  ext.l d7
  1986.  add.l d7,d7
  1987.  add.l d7,a0
  1988.  move.w #0,d7
  1989.  
  1990.  move.l BRIGHTNESS,a6
  1991.  
  1992.  move.l a7,SAVESTACK
  1993.  move.l #SHADOWBUFFER,a7
  1994.  
  1995.  subq #1,d0
  1996.  
  1997. ; d0=xdist
  1998. ; d2=U    a1=DU
  1999. ; d3=V  a4=DV
  2000. ; d4=X  a5=DX
  2001. ; d5=Y  a6=DY
  2002. ; d6=Z  a3=DZ
  2003.  move.w HIGHPOLY,d5
  2004.  
  2005.  moveq #0,d1
  2006.  swap d6
  2007.  move.w d6,d1
  2008.  lsl.w #8,d1
  2009.  swap d4
  2010.  move.b d4,d1
  2011.  swap d4
  2012.  swap d6
  2013.  
  2014.  moveq #0,d7
  2015.  move.b (a7,d1.l),d7
  2016.  cmp.w d7,d5
  2017.  ble INTHELIGHT
  2018.  bra.s INTHEDARK
  2019.  
  2020. PENUMBRA:
  2021.  moveq #0,d1
  2022.  swap d6
  2023.  move.w d6,d1
  2024.  lsl.w #8,d1
  2025.  swap d4
  2026.  move.b d4,d1
  2027.  swap d4
  2028.  swap d6
  2029.  add.l a5,d4
  2030.  add.l a3,d6
  2031.  
  2032.  moveq #0,d7
  2033.  move.b (a7,d1.l),d7
  2034.  cmp.w d7,d5
  2035.  ble INTOLIGHT
  2036.  bra.s INTODARK
  2037.  
  2038.  
  2039. INTHEDARK:
  2040.  moveq #0,d1
  2041.  swap d6
  2042.  move.w d6,d1
  2043.  lsl.w #8,d1
  2044.  swap d4
  2045.  move.b d4,d1
  2046.  swap d4
  2047.  swap d6
  2048.  add.l a5,d4
  2049.  add.l a3,d6
  2050.  
  2051.  moveq #0,d7
  2052.  move.b (a7,d1.l),d7
  2053.  cmp.w d7,d5
  2054.  ble.s INTOPENUM
  2055. INTODARK:
  2056.  move.w #$5c00,d7
  2057.  swap d2
  2058.  move.w d2,d1
  2059.  asl.w #8,d1
  2060.  swap d3
  2061.  move.b d3,d1
  2062.  swap d2
  2063.  swap d3
  2064.  add.l a1,d2
  2065.  add.l a4,d3
  2066.  
  2067. ; move.b (a0,d1.w*4),d7
  2068. ; beq.s .noplottt
  2069.  
  2070.  move.b TEXTUREPAL-256(pc,d7.w),(a2)+
  2071.  dbra d0,INTHEDARK
  2072.  bra.s PASTAC 
  2073.  
  2074. .noplottt
  2075.  addq #1,a2
  2076.  dbra d0,INTHEDARK
  2077.  bra.s PASTAC
  2078.  
  2079. INTOPENUM:
  2080.  move.l a6,d7
  2081.  swap d7
  2082.  swap d2
  2083.  move.w d2,d1
  2084.  asl.w #8,d1
  2085.  swap d3
  2086.  move.b d3,d1
  2087.  swap d2
  2088.  swap d3
  2089.  add.l a1,d2
  2090.  add.l a4,d3
  2091.  
  2092. ; move.b (a0,d1.w*4),d7
  2093. ; beq.s .noplottt
  2094.  
  2095.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2096.  dbra d0,PENUMBRA
  2097.  bra.s PASTAC 
  2098.  
  2099. .noplottt
  2100.  addq #1,a2
  2101.  dbra d0,PENUMBRA
  2102.  bra.s PASTAC
  2103.  
  2104. INTHELIGHT:
  2105.  
  2106.  moveq #0,d1
  2107.  swap d6
  2108.  move.w d6,d1
  2109.  lsl.w #8,d1
  2110.  swap d4
  2111.  move.b d4,d1
  2112.  swap d4
  2113.  swap d6
  2114.  add.l a5,d4
  2115.  add.l a3,d6
  2116.  
  2117.  moveq #0,d7
  2118.  move.b (a7,d1.l),d7
  2119.  cmp.w d7,d5
  2120.  bgt.s INTOPENUM
  2121. INTOLIGHT:
  2122.  move.w a6,d7
  2123.  swap d2
  2124.  move.w d2,d1
  2125.  asl.w #8,d1
  2126.  swap d3
  2127.  move.b d3,d1
  2128.  swap d2
  2129.  swap d3
  2130.  add.l a1,d2
  2131.  add.l a4,d3
  2132.  
  2133. ; move.b (a0,d1.w*4),d7
  2134. ; beq.s .noplottt
  2135.  
  2136.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2137.  dbra d0,INTHELIGHT
  2138.  bra.s PASTAC 
  2139.  
  2140. .noplottt:
  2141.  addq #1,a2
  2142.  dbra d0,INTHELIGHT
  2143.  
  2144. PASTAC
  2145.  
  2146.  move.l SAVESTACK,a7
  2147.  
  2148.  move.l (a7)+,d1
  2149.  move.l (a7)+,a0
  2150.  move.l (a7)+,a2
  2151.  
  2152. .noline:
  2153.  add.w #320,a2
  2154.  
  2155.  swap d1
  2156.  dbra d1,DOAHORLINE
  2157.  
  2158.  
  2159.  bra NOPOLYGON
  2160.  
  2161. TEXTUREPAL: incbin "ab3:includes/shadow.pal"
  2162.  
  2163. SAVESTACK: dc.l 0
  2164. HIGHPOLY: dc.w 0
  2165. LEN1: dc.w 0
  2166. BRIGHTNESS: dc.l 0
  2167. TRANSTEXT: dc.w 0
  2168. AANG: dc.w 0
  2169. BANG: dc.w 0
  2170. CANG: dc.w 0
  2171. DANG: dc.w 0
  2172.  
  2173. NOPOLYGON:
  2174. polybehind:
  2175.  rts
  2176.  
  2177.  
  2178. GOURPOLY: 
  2179.  
  2180. DOAHORLINEGOUR:
  2181.  swap d1
  2182.  
  2183.  move.w RIGHTUVS-LEFTUVS(a0),d0
  2184.  move.w (a0)+,d7
  2185.  asr.w #2,d0
  2186.  asr.w #2,d7
  2187.  sub.w d7,d0
  2188.  bge.s .okflibble
  2189.  
  2190.  add.w #14,a0
  2191.  add.w #320,a2
  2192.  swap d1
  2193.  dbra d1,DOAHORLINEGOUR
  2194.  bra NOPOLYGON
  2195.  
  2196. .okflibble:
  2197.  
  2198.  move.l a2,-(a7)
  2199.  
  2200.  add.w d7,a2
  2201.  ext.l d0
  2202.  addq #1,d0
  2203.  
  2204.  move.b RIGHTUVS-LEFTUVS(a0),d3
  2205.  move.b (a0),d2
  2206.  ext.w d3
  2207.  ext.w d2
  2208.  
  2209.  tst.w d2
  2210.  blt .firsttowards
  2211.  
  2212.  bgt .firstaway
  2213.  tst.w d3
  2214.  blt .bothtowards
  2215.  bra .bothaway
  2216.  
  2217. .firsttowards:
  2218.  tst.w d3
  2219.  ble .bothtowards
  2220.  
  2221. ; First is towards and second away...
  2222.  
  2223.  move.w d0,d7    ; total length
  2224.  move.w d0,d6
  2225.  neg.w d2
  2226.  add.w d2,d3
  2227.  muls d2,d6
  2228.  divs d3,d6    ; length of first bit
  2229.  sub.w d6,d7    ; length of second bit
  2230.  move.w d6,FIRSTLEN
  2231.  move.w d7,LASTLEN
  2232.  
  2233.  tst.w FIRSTLEN
  2234.  beq .bothaway
  2235.  tst.w LASTLEN
  2236.  beq .bothtowards
  2237.  
  2238.  moveq #0,d2
  2239.  moveq #0,d3
  2240.  moveq #0,d4
  2241.  moveq #0,d5
  2242.  move.b 6(a0),d2
  2243.  move.b 7(a0),d3
  2244.  
  2245.  move.w d2,FIRSTU
  2246.  move.w d3,FIRSTV
  2247.  
  2248.  move.w d2,d4
  2249.  move.w d3,d5
  2250.  sub.w #128,d2
  2251.  sub.w #128,d3
  2252.  muls d2,d2
  2253.  muls d3,d3
  2254.  add.l d3,d2
  2255.  jsr CALCSQROOT
  2256.  
  2257.  tst.w d2
  2258.  beq.s .nochng
  2259.  
  2260.  sub.w #128,d4
  2261.  sub.w #128,d5
  2262.  muls #127,d4
  2263.  muls #127,d5
  2264.  divs d2,d4
  2265.  divs d2,d5
  2266.  add.w #128,d4
  2267.  add.w #128,d5
  2268.  
  2269. .nochng:
  2270.  
  2271.  move.w d4,MIDU
  2272.  move.w d5,MIDV
  2273.  
  2274.  move.b 6+RIGHTUVS-LEFTUVS(a0),d4
  2275.  move.b 7+RIGHTUVS-LEFTUVS(a0),d5
  2276.  move.w d4,SECU
  2277.  move.w d5,SECV
  2278.  
  2279.  move.w d4,d2
  2280.  move.w d5,d3
  2281.  
  2282.  sub.w #128,d2
  2283.  sub.w #128,d3
  2284.  muls d2,d2
  2285.  muls d3,d3
  2286.  add.l d3,d2
  2287.  jsr CALCSQROOT
  2288.  
  2289.  tst.w d2
  2290.  beq.s .nochng2
  2291.  
  2292.  sub.w #128,d4
  2293.  sub.w #128,d5
  2294.  muls #127,d4
  2295.  muls #127,d5
  2296.  divs d2,d4
  2297.  divs d2,d5
  2298.  add.w #128,d4
  2299.  add.w #128,d5
  2300.  
  2301. .nochng2:
  2302.  
  2303.  add.w MIDU,d4
  2304.  add.w MIDV,d5
  2305.  asr.w #1,d4
  2306.  asr.w #1,d5
  2307.  move.w d4,MIDU
  2308.  move.w d5,MIDV 
  2309.  
  2310.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2311.  move.l (a0)+,d2 
  2312.  
  2313.  and.l #$ffffff,d2
  2314.  and.l #$ffffff,d7
  2315.  
  2316.  moveq #0,d3
  2317.  moveq #0,d5
  2318.  move.w d2,d3
  2319.  move.w d7,d5
  2320.  swap d3
  2321.  swap d5
  2322.  sub.l d3,d5
  2323.  divs.l d0,d5
  2324.  asr.l #8,d5
  2325.  move.w d5,RIGHTBRIGHT
  2326.  asr.l #8,d3
  2327.  move.w d3,LEFTBRIGHT
  2328.  
  2329.  clr.w d2
  2330.  clr.w d7
  2331.  sub.l d2,d7
  2332.  asl.l #8,d2
  2333.  divs.l d0,d7
  2334.  asl.l #8,d7
  2335.  
  2336.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2337.  move.l (a0)+,d3
  2338.  
  2339.  moveq #0,d4
  2340.  moveq #0,d5
  2341.  
  2342. ; move.w d6,d5
  2343. ; move.w d3,d4
  2344. ; move.b #0,d4
  2345. ; move.b #0,d5
  2346.  
  2347.  move.w FIRSTU,d4
  2348.  move.w MIDU,d5
  2349.  lsl.l #8,d4
  2350.  lsl.l #8,d5
  2351.  
  2352.  sub.l d4,d5
  2353.  divs.l FIRSTLEN-2,d5
  2354.  
  2355.  move.w d4,d2
  2356.  move.w d5,d7
  2357.  move.l d7,a1
  2358.  moveq #0,d4
  2359.  moveq #0,d5
  2360.  
  2361. ; move.b d6,d5
  2362. ; move.b d3,d4
  2363.  
  2364. ; swap d5
  2365. ; swap d4
  2366.  
  2367.  move.w FIRSTV,d4
  2368.  move.w MIDV,d5
  2369.  swap d4
  2370.  swap d5
  2371.  
  2372.  sub.l d4,d5
  2373.  divs.l FIRSTLEN-2,d5
  2374.  
  2375.  move.l d5,a3
  2376.  move.l d4,d5
  2377.   
  2378.  clr.w d3
  2379.  clr.w d6
  2380.  sub.l d3,d6
  2381.  divs.l d0,d6
  2382.  move.l d6,a4
  2383.  
  2384.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2385.  move.w (a0)+,d4
  2386.  swap d7
  2387.  clr.w d7
  2388.  swap d4
  2389.  clr.w d4
  2390.  sub.l d4,d7
  2391.  divs.l d0,d7
  2392.  move.l d7,a5
  2393.  
  2394. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2395. ; swap d7
  2396. ; clr.w d7
  2397.  move.w (a0)+,d7
  2398. ; swap d5
  2399. ; clr.w d5
  2400. ; sub.l d5,d7
  2401. ; divs.l d0,d7
  2402. ; move.l d7,a6
  2403.  
  2404.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2405.  swap d7
  2406.  clr.w d7
  2407.  move.w (a0)+,d6
  2408.  swap d6
  2409.  clr.w d6
  2410.  sub.l d6,d7
  2411.  divs.l d0,d7
  2412.  
  2413.  lsl.l #8,d6
  2414.  lsl.l #8,d7
  2415.  
  2416.  move.w RIGHTBRIGHT,d7
  2417.  move.l d7,a6
  2418.  
  2419.  move.l a0,-(a7)
  2420.  move.l d1,-(a7)
  2421.  move.l #TEXTURES,a0
  2422.  move.w TEXTUREADD,d7
  2423.  bge.s .okaddtes3
  2424.  and.w #$7fff,d7
  2425.  add.l #65536*2,a0
  2426. .okaddtes3:
  2427.  ext.l d7
  2428.  add.l d7,d7
  2429.  add.l d7,a0
  2430.  move.w #0,d7
  2431.  
  2432.  move.w LEFTBRIGHT,d6
  2433.  
  2434.  subq #1,d0
  2435.  swap d0
  2436.  move.w HIGHPOLY,d0
  2437.  swap d0
  2438.  
  2439.  
  2440. ; d0=xdist
  2441. ; d2=U    a1=DU
  2442. ; d3=V  a4=DV
  2443. ; d4=X  a5=DX
  2444. ; d5=Y  a6=DY
  2445. ; d6=Z  a3=DZ
  2446.  
  2447. ; d0= polynum : polynum : counter : counter
  2448. ; d1= scratch : scratch : scratch : scratch
  2449. ; d2= u : uacc : sv : svacc
  2450. ; d3= v : v : vacc : vacc
  2451. ; d4= x : x : xacc : xacc
  2452. ; d5= su : su : suacc : suacc
  2453. ; d6= z : zacc : bright : brightacc
  2454. ; d7= scratch : scratch : scratch : scratch
  2455.  
  2456. ; a0= textures
  2457. ; a1= uspeed : uspeed : suspeed : suspeed
  2458. ; a2= screen pointer
  2459. ; a3= svspeed : svspeed : svspeed : svspeed
  2460. ; a4= vspeed : vspeed : vspeed : vspeed
  2461. ; a5= xspeed : xspeed : xspeed : xspeed
  2462. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2463. ; a7= shadowmap pointer
  2464.  
  2465.  
  2466.  move.w FIRSTLEN,d0
  2467.  sub.w #1,d0
  2468.  bsr STARTLINE
  2469.  
  2470.  move.l #0,d5
  2471.  move.w #0,d2
  2472.  move.l #0,a3
  2473.  
  2474.  move.w LASTLEN,d0
  2475.  sub.w #1,d0
  2476.  
  2477.  bsr STARTLINE
  2478.  
  2479.  
  2480.  move.l (a7)+,d1
  2481.  move.l (a7)+,a0
  2482.  move.l (a7)+,a2
  2483.  
  2484.  bra .noline
  2485.  
  2486. .firstaway:
  2487.  tst.w d3
  2488.  bge .bothaway
  2489.  
  2490.  
  2491. ; first is away and second is towards...
  2492.  
  2493. ; this really isn't going to work...
  2494.  
  2495.  move.w d0,d7    ; total length
  2496.  move.w d0,d6
  2497.  neg.w d3
  2498.  add.w d2,d3
  2499.  muls d2,d6
  2500.  divs d3,d6    ; length of first bit
  2501.  sub.w d6,d7    ; length of second bit
  2502.  move.w d6,FIRSTLEN
  2503.  move.w d7,LASTLEN
  2504.  
  2505.  tst.w FIRSTLEN
  2506.  beq .bothaway
  2507.  tst.w LASTLEN
  2508.  beq .bothtowards
  2509.  
  2510.  moveq #0,d2
  2511.  moveq #0,d3
  2512.  moveq #0,d4
  2513.  moveq #0,d5
  2514.  move.b 6(a0),d2
  2515.  move.b 7(a0),d3
  2516.  
  2517.  move.w d2,FIRSTU
  2518.  move.w d3,FIRSTV
  2519.  
  2520.  move.w d2,d4
  2521.  move.w d3,d5
  2522.  sub.w #128,d2
  2523.  sub.w #128,d3
  2524.  muls d2,d2
  2525.  muls d3,d3
  2526.  add.l d3,d2
  2527.  jsr CALCSQROOT
  2528.  
  2529.  tst.w d2
  2530.  beq.s .nochng22
  2531.  
  2532.  sub.w #128,d4
  2533.  sub.w #128,d5
  2534.  muls #127,d4
  2535.  muls #127,d5
  2536.  divs d2,d4
  2537.  divs d2,d5
  2538.  add.w #128,d4
  2539.  add.w #128,d5
  2540.  
  2541. .nochng22:
  2542.  
  2543.  move.w d4,MIDU
  2544.  move.w d5,MIDV
  2545.  
  2546.  moveq #0,d4
  2547.  moveq #0,d5
  2548.  move.b 6+RIGHTUVS-LEFTUVS(a0),d4
  2549.  move.b 7+RIGHTUVS-LEFTUVS(a0),d5
  2550.  move.w d4,SECU
  2551.  move.w d5,SECV
  2552.  
  2553.  move.w d4,d2
  2554.  move.w d5,d3
  2555.  
  2556.  sub.w #128,d2
  2557.  sub.w #128,d3
  2558.  muls d2,d2
  2559.  muls d3,d3
  2560.  add.l d3,d2
  2561.  jsr CALCSQROOT
  2562.  
  2563.  tst.w d2
  2564.  beq.s .nochng222
  2565.  
  2566.  sub.w #128,d4
  2567.  sub.w #128,d5
  2568.  muls #127,d4
  2569.  muls #127,d5
  2570.  divs d2,d4
  2571.  divs d2,d5
  2572.  add.w #128,d4
  2573.  add.w #128,d5
  2574.  
  2575. .nochng222:
  2576.  
  2577.  add.w MIDU,d4
  2578.  add.w MIDV,d5
  2579.  asr.w #1,d4
  2580.  asr.w #1,d5
  2581.  move.w d4,MIDU
  2582.  move.w d5,MIDV
  2583.  
  2584.  
  2585.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2586.  move.l (a0)+,d2 
  2587.  
  2588.  and.l #$ffffff,d2
  2589.  and.l #$ffffff,d7
  2590.  
  2591.  moveq #0,d3
  2592.  moveq #0,d5
  2593.  move.w d2,d3
  2594.  move.w d7,d5
  2595.  swap d3
  2596.  swap d5
  2597.  sub.l d3,d5
  2598.  divs.l d0,d5
  2599.  asr.l #8,d5
  2600.  move.w d5,RIGHTBRIGHT
  2601.  asr.l #8,d3
  2602.  move.w d3,LEFTBRIGHT
  2603.  
  2604.  clr.w d2
  2605.  clr.w d7
  2606.  sub.l d2,d7
  2607.  asl.l #8,d2
  2608.  divs.l d0,d7
  2609.  asl.l #8,d7
  2610.  
  2611.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2612.  move.l (a0)+,d3
  2613.  
  2614.  moveq #0,d4
  2615.  moveq #0,d5
  2616.  
  2617.  move.w MIDU,d4
  2618.  move.w SECU,d5
  2619.  lsl.w #8,d4
  2620.  lsl.w #8,d5
  2621.  
  2622. ; move.w d6,d5
  2623. ; move.w d3,d4
  2624. ; move.b #0,d4
  2625. ; move.b #0,d5
  2626.  
  2627.  sub.l d4,d5
  2628.  divs.l LASTLEN-2,d5
  2629.  
  2630.  move.w d4,d2
  2631.  move.w d5,d7
  2632.  move.l d7,a1
  2633.  moveq #0,d4
  2634.  moveq #0,d5
  2635.  
  2636.  move.w MIDV,d4
  2637.  move.w SECV,d5
  2638.  
  2639.  swap d5
  2640.  swap d4
  2641.  
  2642.  sub.l d4,d5
  2643.  divs.l LASTLEN-2,d5
  2644.  
  2645.  move.l d5,a3
  2646.  move.l d4,d5
  2647.  
  2648.  clr.w d3
  2649.  clr.w d6
  2650.  sub.l d3,d6
  2651.  divs.l d0,d6
  2652.  move.l d6,a4
  2653.  
  2654.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2655.  move.w (a0)+,d4
  2656.  swap d7
  2657.  clr.w d7
  2658.  swap d4
  2659.  clr.w d4
  2660.  sub.l d4,d7
  2661.  divs.l d0,d7
  2662.  move.l d7,a5
  2663.  
  2664. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2665. ; swap d7
  2666. ; clr.w d7
  2667.  move.w (a0)+,d7
  2668. ; swap d5
  2669. ; clr.w d5
  2670. ; sub.l d5,d7
  2671. ; divs.l d0,d7
  2672. ; move.l d7,a6
  2673.  
  2674.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2675.  swap d7
  2676.  clr.w d7
  2677.  move.w (a0)+,d6
  2678.  swap d6
  2679.  clr.w d6
  2680.  sub.l d6,d7
  2681.  divs.l d0,d7
  2682.  
  2683.  lsl.l #8,d6
  2684.  lsl.l #8,d7
  2685.  
  2686.  move.w RIGHTBRIGHT,d7
  2687.  move.l d7,a6
  2688.  
  2689.  move.l a0,-(a7)
  2690.  move.l d1,-(a7)
  2691.  move.l #TEXTURES,a0
  2692.  move.w TEXTUREADD,d7
  2693.  bge.s .okaddtes4
  2694.  and.w #$7fff,d7
  2695.  add.l #65536*2,a0
  2696. .okaddtes4:
  2697.  ext.l d7
  2698.  add.l d7,d7
  2699.  add.l d7,a0
  2700.  move.w #0,d7
  2701.  
  2702.  move.w LEFTBRIGHT,d6
  2703.  
  2704.  
  2705.  subq #1,d0
  2706.  swap d0
  2707.  move.w HIGHPOLY,d0
  2708.  swap d0
  2709.  
  2710.  
  2711. ; d0=xdist
  2712. ; d2=U    a1=DU
  2713. ; d3=V  a4=DV
  2714. ; d4=X  a5=DX
  2715. ; d5=Y  a6=DY
  2716. ; d6=Z  a3=DZ
  2717.  
  2718. ; d0= polynum : polynum : counter : counter
  2719. ; d1= scratch : scratch : scratch : scratch
  2720. ; d2= u : uacc : sv : svacc
  2721. ; d3= v : v : vacc : vacc
  2722. ; d4= x : x : xacc : xacc
  2723. ; d5= su : su : suacc : suacc
  2724. ; d6= z : zacc : bright : brightacc
  2725. ; d7= scratch : scratch : scratch : scratch
  2726.  
  2727. ; a0= textures
  2728. ; a1= uspeed : uspeed : suspeed : suspeed
  2729. ; a2= screen pointer
  2730. ; a3= svspeed : svspeed : svspeed : svspeed
  2731. ; a4= vspeed : vspeed : vspeed : vspeed
  2732. ; a5= xspeed : xspeed : xspeed : xspeed
  2733. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2734. ; a7= shadowmap pointer
  2735.  
  2736.  move.w d2,-(a7)
  2737.  move.l d5,-(a7)
  2738.  move.l a3,-(a7)
  2739.  
  2740.  move.w #0,d2
  2741.  move.l #0,d5
  2742.  move.l #0,a3
  2743.  
  2744.  move.w FIRSTLEN,d0
  2745.  subq #1,d0
  2746.  bsr STARTLINE
  2747.  
  2748.  
  2749.  move.l (a7)+,a3
  2750.  move.l (a7)+,d5
  2751.  move.w (a7)+,d2
  2752.  
  2753.  move.w LASTLEN,d0
  2754.  subq #1,d0
  2755.  
  2756.  bsr STARTLINE
  2757.  
  2758.  
  2759.  move.l (a7)+,d1
  2760.  move.l (a7)+,a0
  2761.  move.l (a7)+,a2
  2762.  
  2763.  bra .noline
  2764.  
  2765.  
  2766. .bothaway:
  2767.  
  2768.  move.w #0,6+RIGHTUVS-LEFTUVS(a0)
  2769.  move.w #0,6(a0)
  2770.  
  2771. .bothtowards:
  2772.  
  2773.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2774.  move.l (a0)+,d2 
  2775.  
  2776.  and.l #$ffffff,d2
  2777.  and.l #$ffffff,d7
  2778.  
  2779.  moveq #0,d3
  2780.  moveq #0,d5
  2781.  move.w d2,d3
  2782.  move.w d7,d5
  2783.  swap d3
  2784.  swap d5
  2785.  sub.l d3,d5
  2786.  divs.l d0,d5
  2787.  asr.l #8,d5
  2788.  move.w d5,RIGHTBRIGHT
  2789.  asr.l #8,d3
  2790.  move.w d3,LEFTBRIGHT
  2791.  
  2792.  clr.w d2
  2793.  clr.w d7
  2794.  sub.l d2,d7
  2795.  asl.l #8,d2
  2796.  divs.l d0,d7
  2797.  asl.l #8,d7
  2798.  
  2799.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2800.  move.l (a0)+,d3
  2801.  
  2802.  moveq #0,d4
  2803.  moveq #0,d5
  2804.  
  2805.  move.w d6,d5
  2806.  move.w d3,d4
  2807.  move.b #0,d4
  2808.  move.b #0,d5
  2809.  
  2810.  sub.l d4,d5
  2811.  divs.l d0,d5
  2812.  
  2813.  move.w d4,d2
  2814.  move.w d5,d7
  2815.  move.l d7,a1
  2816.  moveq #0,d4
  2817.  moveq #0,d5
  2818.  
  2819.  move.b d6,d5
  2820.  move.b d3,d4
  2821.  
  2822.  swap d5
  2823.  swap d4
  2824.  
  2825.  sub.l d4,d5
  2826.  divs.l d0,d5
  2827.  
  2828.  move.l d5,a3
  2829.  move.l d4,d5
  2830.  
  2831.   
  2832.  clr.w d3
  2833.  clr.w d6
  2834.  sub.l d3,d6
  2835.  divs.l d0,d6
  2836.  move.l d6,a4
  2837.  
  2838.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2839.  move.w (a0)+,d4
  2840.  swap d7
  2841.  clr.w d7
  2842.  swap d4
  2843.  clr.w d4
  2844.  sub.l d4,d7
  2845.  divs.l d0,d7
  2846.  move.l d7,a5
  2847.  
  2848. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2849. ; swap d7
  2850. ; clr.w d7
  2851.  move.w (a0)+,d7
  2852. ; swap d5
  2853. ; clr.w d5
  2854. ; sub.l d5,d7
  2855. ; divs.l d0,d7
  2856. ; move.l d7,a6
  2857.  
  2858.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2859.  swap d7
  2860.  clr.w d7
  2861.  move.w (a0)+,d6
  2862.  swap d6
  2863.  clr.w d6
  2864.  sub.l d6,d7
  2865.  divs.l d0,d7
  2866.  
  2867.  lsl.l #8,d6
  2868.  lsl.l #8,d7
  2869.  
  2870.  move.w RIGHTBRIGHT,d7
  2871.  move.l d7,a6
  2872.  
  2873.  move.l a0,-(a7)
  2874.  move.l d1,-(a7)
  2875.  move.l #TEXTURES,a0
  2876.  move.w TEXTUREADD,d7
  2877.  bge.s .okaddtes5
  2878.  and.w #$7fff,d7
  2879.  add.l #65536*2,a0
  2880. .okaddtes5:
  2881.  ext.l d7
  2882.  add.l d7,d7
  2883.  add.l d7,a0
  2884.  move.w #0,d7
  2885.  
  2886.  move.w LEFTBRIGHT,d6
  2887.  
  2888.  subq #1,d0
  2889.  swap d0
  2890.  move.w HIGHPOLY,d0
  2891.  swap d0
  2892.  
  2893.  
  2894. ; d0=xdist
  2895. ; d2=U    a1=DU
  2896. ; d3=V  a4=DV
  2897. ; d4=X  a5=DX
  2898. ; d5=Y  a6=DY
  2899. ; d6=Z  a3=DZ
  2900.  
  2901. ; d0= polynum : polynum : counter : counter
  2902. ; d1= scratch : scratch : scratch : scratch
  2903. ; d2= u : uacc : sv : svacc
  2904. ; d3= v : v : vacc : vacc
  2905. ; d4= x : x : xacc : xacc
  2906. ; d5= su : su : suacc : suacc
  2907. ; d6= z : zacc : bright : brightacc
  2908. ; d7= scratch : scratch : scratch : scratch
  2909.  
  2910. ; a0= textures
  2911. ; a1= uspeed : uspeed : suspeed : suspeed
  2912. ; a2= screen pointer
  2913. ; a3= svspeed : svspeed : svspeed : svspeed
  2914. ; a4= vspeed : vspeed : vspeed : vspeed
  2915. ; a5= xspeed : xspeed : xspeed : xspeed
  2916. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2917. ; a7= shadowmap pointer
  2918.  
  2919.  bsr STARTLINE
  2920.  
  2921.  move.l (a7)+,d1
  2922.  move.l (a7)+,a0
  2923.  move.l (a7)+,a2
  2924.  
  2925. .noline:
  2926.  add.w #320,a2
  2927.  
  2928.  swap d1
  2929.  dbra d1,DOAHORLINEGOUR
  2930.  
  2931.  bra NOPOLYGON
  2932.  
  2933.  
  2934.  
  2935.  
  2936.  
  2937. *******************************
  2938. STARTLINE:
  2939.  
  2940.  move.l a7,SAVESTACK
  2941.  move.l #SHADOWBUFFER,a7
  2942.  
  2943.  moveq #0,d1
  2944.  swap d6
  2945.  move.w d6,d1
  2946.  swap d4
  2947.  move.b d4,d1
  2948.  swap d4
  2949.  swap d6
  2950.  
  2951.  swap d0
  2952.  moveq #0,d7
  2953.  move.b (a7,d1.l),d7
  2954.  cmp.w d7,d0
  2955.  ble .startlight
  2956.  swap d0
  2957.  bra INTHEDARKGOUR
  2958. .startlight:
  2959.  swap d0
  2960.  bra INTHELIGHTGOUR 
  2961. .startdark:
  2962. ***********************************
  2963.  
  2964.  
  2965.  
  2966. PENUMBRAGOUR:
  2967.  moveq #0,d1
  2968.  swap d6
  2969.  move.w d6,d1
  2970.  swap d4
  2971.  move.b d4,d1
  2972.  swap d4
  2973.  swap d6
  2974.  add.l a5,d4
  2975.  add.l a6,d6
  2976.  add.l a3,d5
  2977.  
  2978.  swap d0
  2979.  moveq #0,d7
  2980.  move.b (a7,d1.l),d7
  2981.  cmp.w d7,d0
  2982.  ble INTOLIGHTGOUR
  2983.  bra.s INTODARKGOUR
  2984.  
  2985. INTHEDARKGOUR:
  2986.  moveq #0,d1
  2987.  swap d6
  2988.  move.w d6,d1
  2989.  swap d4
  2990.  move.b d4,d1
  2991.  swap d4
  2992.  swap d6
  2993.  add.l a5,d4
  2994.  add.l a6,d6
  2995.  add.l a3,d5
  2996.  
  2997.  swap d0
  2998.  moveq #0,d7
  2999.  move.b (a7,d1.l),d7
  3000.  cmp.w d7,d0
  3001.  ble.s INTOPENUMGOUR
  3002. INTODARKGOUR:
  3003.  swap d0
  3004.  move.w #$5c00,d7
  3005.  swap d2
  3006.  move.w d2,d1
  3007.  swap d3
  3008.  move.b d3,d1
  3009.  swap d2
  3010.  swap d3
  3011.  add.l a1,d2
  3012.  add.l a4,d3
  3013.  
  3014.  move.b 1(a0,d1.w*8),d7
  3015.  bra DARKplottt
  3016.  
  3017. .noplottt
  3018.  addq #1,a2
  3019.  dbra d0,INTHEDARKGOUR
  3020.  bra DONEDONEBUM
  3021.  
  3022. INTOPENUMGOUR:
  3023.  swap d0
  3024.  move.w d6,d7
  3025.  
  3026.  sub.w #$5c00,d7
  3027.  asr.w #1,d7
  3028.  add.w #$5c00,d7
  3029.  
  3030.  swap d2
  3031.  move.w d2,d1
  3032.  swap d3
  3033.  move.b d3,d1
  3034.  swap d2
  3035.  swap d3
  3036.  add.l a1,d2
  3037.  add.l a4,d3
  3038.  
  3039.  move.b 1(a0,d1.w*8),d7
  3040.  bra.s PENUMplottt
  3041.  
  3042. .noplottt
  3043.  addq #1,a2
  3044.  dbra d0,PENUMBRAGOUR
  3045.  bra DONEDONEBUM
  3046.  
  3047.  
  3048. INTHELIGHTGOUR:
  3049.  
  3050.  moveq #0,d1
  3051.  swap d6
  3052.  move.w d6,d1
  3053.  swap d4
  3054.  move.b d4,d1
  3055.  swap d4
  3056.  swap d6
  3057.  add.l a5,d4
  3058.  add.l a6,d6
  3059.  add.l a3,d5
  3060.  
  3061.  swap d0
  3062.  moveq #0,d7
  3063.  move.b (a7,d1.l),d7
  3064.  cmp.w d7,d0
  3065.  bgt.s INTOPENUMGOUR
  3066. INTOLIGHTGOUR:
  3067.  swap d0
  3068.  move.w d6,d7
  3069.  swap d7
  3070.  swap d2
  3071.  move.w d2,d1
  3072.  swap d3
  3073.  move.b d3,d1
  3074.  swap d2
  3075.  swap d3
  3076.  add.l a1,d2
  3077.  add.l a4,d3
  3078.   
  3079.  move.w (a0,d1.w*8),d7
  3080.  bra.s LIGHTPLOTT
  3081. .noplottt:
  3082.  addq #1,a2
  3083.  dbra d0,INTHELIGHTGOUR
  3084. FLIBBLEY:
  3085.  bra DONEDONEBUM
  3086.  
  3087. PENUMplottt
  3088.  move.b GOURPAL(pc,d7.w),(a2)+
  3089.  dbra d0,PENUMBRAGOUR
  3090.  bra DONEDONEBUM
  3091.  
  3092. DARKplottt
  3093.  move.b GOURPAL(pc,d7.w),(a2)+
  3094.  dbra d0,INTHEDARKGOUR
  3095.  bra.s FLIBBLEY
  3096.  
  3097. LIGHTPLOTT:
  3098.  move.l #65536,d1
  3099.  move.w d2,d1
  3100.  swap d5
  3101.  move.b d5,d1
  3102.  swap d5
  3103.  
  3104.  move.b (a7,d1.l),d1
  3105.  lsl.w #8,d1
  3106.  add.w d7,d1
  3107.  swap d7
  3108.  move.b d1,d7
  3109.  move.b GOURPAL(pc,d7.w),d1
  3110.  move.b GOURPAL(pc,d1.w),(a2)+
  3111.  dbra d0,INTHELIGHTGOUR
  3112.  bra.s FLIBBLEY
  3113.  
  3114.  
  3115. GOURPAL: incbin "ab3:includes/shadow.pal"
  3116.  
  3117. DONEDONEBUM:
  3118.  move.l SAVESTACK,a7
  3119.  rts
  3120.  
  3121.  
  3122.  
  3123. LEFTSHINEV: dc.l 0
  3124. RIGHTSHINEV: dc.l 0
  3125. LEFTSHINEU: dc.l 0
  3126. RIGHTSHINEU: dc.l 0
  3127.  
  3128. TOPPTR: dc.l 0
  3129. TOPPTNUM: dc.w 0
  3130. BOTPTNUM: dc.w 0
  3131. LEFTBRIGHT: dc.w 0
  3132. RIGHTBRIGHT: dc.l 0
  3133. LEFTSPEC: dc.w 0
  3134. RIGHTSPEC: dc.w 0
  3135.  
  3136. ***********************************************
  3137.     
  3138. SIMPLECALCLINE:
  3139.  move.l #ONSCREENPTS,a1
  3140.  
  3141.  move.w 2(a1,d0.w*4),d2        ;fy
  3142.  move.w 2(a1,d1.w*4),d7        ;sy
  3143.  
  3144.  move.l #RIGHTUVS,a3
  3145.  asr.w #2,d2
  3146.  asr.w #2,d7
  3147.  cmp.w d2,d7 
  3148.  beq .noline
  3149.  
  3150.  bgt.s .lineonright
  3151. .lineonleft:
  3152.  move.l #LEFTUVS,a3
  3153.  exg d0,d1
  3154.  exg d2,d7
  3155.  
  3156. .lineonright:
  3157.  move.w d0,TOPPTNUM
  3158.  move.w d1,BOTPTNUM
  3159.  
  3160.  sub.w d2,d7
  3161.  asl.w #4,d2
  3162.  add.w d2,a3
  3163.  move.l a3,TOPPTR
  3164.  
  3165.  move.w d7,YDIFF
  3166.  
  3167.  move.w (a1,d0.w*4),d3        ;fx
  3168.  move.w (a1,d1.w*4),d7        ;sx
  3169.  
  3170.  sub.w d3,d7
  3171.  swap d3
  3172.  swap d7
  3173.  clr.w d3
  3174.  clr.w d7
  3175.  divs.l YDIFF-2,d7
  3176.  move.l d7,a0    ; dx
  3177.  
  3178.  move.l #UVCOORDS,a2
  3179.  move.l #SHADOWPTS,a1
  3180.  
  3181.  move.w (a2,d0.w*4),d4
  3182.  move.w 2(a2,d0.w*4),d5
  3183.  move.w (a2,d1.w*4),d6
  3184.  move.w 2(a2,d1.w*4),d7
  3185.  
  3186.  sub.w d4,d6
  3187.  sub.w d5,d7
  3188.  swap d4
  3189.  swap d5
  3190.  clr.w d4
  3191.  clr.w d5
  3192.  swap d6
  3193.  swap d7
  3194.  clr.w d6
  3195.  clr.w d7
  3196.  
  3197.  divs.l YDIFF-2,d6
  3198.  divs.l YDIFF-2,d7
  3199.  
  3200.  move.l d6,a4
  3201.  move.l d7,a5
  3202.  
  3203.  muls #10,d0
  3204.  muls #10,d1
  3205.  move.l (a1,d0.w),d6
  3206.  
  3207.  move.l (a1,d1.w),d7
  3208.  asl.l #5,d6
  3209.  asl.l #5,d7
  3210.  sub.l d6,d7
  3211.  divs.l YDIFF-2,d7
  3212.  move.l d7,a2
  3213.  move.l d6,a6
  3214.  
  3215.  move.l 4(a1,d0.w),d6
  3216.  move.l 4(a1,d1.w),d7
  3217.  asl.l #5,d6
  3218.  asl.l #5,d7
  3219.  sub.l d6,d7
  3220.  divs.l YDIFF-2,d7
  3221.  exg d7,a6
  3222.  exg d7,d6
  3223.  
  3224.  move.w 8(a1,d0.w),d0
  3225.  move.w 8(a1,d1.w),d1
  3226.  swap d0
  3227.  swap d1
  3228.  clr.w d0
  3229.  clr.w d1
  3230.  asr.l #2,d0
  3231.  asr.l #2,d1
  3232.  sub.l d0,d1
  3233.  divs.l YDIFF-2,d1
  3234.  move.l d1,a1
  3235.  move.l YDIFF-2,d1
  3236.  subq #1,d1
  3237.  
  3238. ; d3=sx a0=dsx
  3239. ; d4=u a4=du
  3240. ; d5=v a5=dv
  3241. ; d6=x a2=dx
  3242. ; d7=y a6=dy
  3243. ; d0=z a1=dz
  3244. ; d1=dsy
  3245.  
  3246.  
  3247.  add.l #128*65536,d6
  3248.  add.l #128*65536,d7
  3249.  add.l #128*65536,d0
  3250.  
  3251. .PUTINLINE:
  3252.  swap d3
  3253.  move.w d3,(a3)+
  3254.  swap d3
  3255.  add.l a0,d3
  3256.  move.l d4,(a3)+
  3257.  add.l a4,d4
  3258.  move.l d5,(a3)+
  3259.  swap d6
  3260.  add.l a5,d5
  3261.  move.w d6,(a3)+
  3262.  swap d6
  3263.  swap d7
  3264.  add.l a2,d6
  3265.  move.w d7,(a3)+
  3266.  swap d7
  3267.  swap d0
  3268.  add.l a6,d7
  3269.  move.w d0,(a3)+
  3270.  swap d0
  3271.  add.l a1,d0
  3272.  dbra d1,.PUTINLINE
  3273.  
  3274.  tst.b Gouraud
  3275.  beq .noline
  3276.  
  3277.  move.w TOPPTNUM,d0
  3278.  move.w BOTPTNUM,d1
  3279.  move.l TOPPTR,a3
  3280.  moveq #0,d6
  3281.  move.w YDIFF,d6
  3282.  
  3283.  move.l #SPECBRIGHTS,a2
  3284.  
  3285.  move.w 2(a2,d0.w*4),d2
  3286.  move.w 2(a2,d1.w*4),d3
  3287.  
  3288.  asr.w #4,d2
  3289.  asr.w #4,d3
  3290.  
  3291.  tst.w d2
  3292.  blt .firsttowards
  3293.  bgt.s .firstaway
  3294.  
  3295.  tst.w d3
  3296.  ble .bothtowards
  3297.  bra .bothaway
  3298.  
  3299. .firstaway
  3300.  tst.w d3
  3301.  blt .sectowards
  3302.  bra .bothaway
  3303.  
  3304. .firsttowards:
  3305.  tst.w d3
  3306.  ble .bothtowards
  3307.  
  3308. ; First one is towards, the second away.
  3309. ; Do the line in two bits: one heading
  3310. ; from the first point to the rim, the
  3311. ; other heading from the rim to the second
  3312. ; point and flagged as behind.
  3313.  
  3314.  move.w d6,d7    ; total length to draw
  3315.  move.w d2,FIRSTY
  3316.  move.w d3,LASTY
  3317.  
  3318.  neg.w d2
  3319.  add.w d2,d3     ; total change in Y
  3320.  
  3321.  bra.s .onetowards
  3322.  
  3323. .sectowards:
  3324.  move.w d6,d7    ; total length to draw
  3325.  move.w d2,FIRSTY
  3326.  move.w d3,LASTY
  3327.  neg.w d3
  3328.  add.w d2,d3
  3329.  
  3330. .onetowards:
  3331.  
  3332.  muls d2,d6
  3333.  divs d3,d6    ; length of first bit of line.
  3334.  
  3335.  ext.l d6
  3336.  ext.l d7
  3337.  
  3338.  move.w d6,FIRSTLEN
  3339.  sub.l d6,d7
  3340.  move.w d7,LASTLEN
  3341.  
  3342.  add.l d7,d6
  3343.  
  3344.  move.w FIRSTY,d2
  3345.  move.w LASTY,d3
  3346.  swap d2
  3347.  clr.w d2
  3348.  swap d3
  3349.  clr.w d3
  3350.  sub.l d2,d3
  3351.  divs.l d6,d3
  3352.  move.l d3,a6
  3353.  move.l d2,d7
  3354.  
  3355.  moveq #0,d2
  3356.  moveq #0,d3
  3357.  moveq #0,d4
  3358.  moveq #0,d5
  3359.  move.b (a2,d0.w*4),d2
  3360.  move.b 1(a2,d0.w*4),d3
  3361.  
  3362.  move.w d2,FIRSTU
  3363.  move.w d3,FIRSTV
  3364.  
  3365.  move.w d2,d4
  3366.  move.w d3,d5
  3367.  sub.w #128,d2
  3368.  sub.w #128,d3
  3369.  muls d2,d2
  3370.  muls d3,d3
  3371.  add.l d3,d2
  3372.  jsr CALCSQROOT
  3373.  
  3374.  tst.w d2
  3375.  beq.s .nochng
  3376.  
  3377.  sub.w #128,d4
  3378.  sub.w #128,d5
  3379.  muls #127,d4
  3380.  muls #127,d5
  3381.  divs d2,d4
  3382.  divs d2,d5
  3383.  add.w #128,d4
  3384.  add.w #128,d5
  3385.  
  3386. .nochng:
  3387.  
  3388.  move.w d4,MIDU
  3389.  move.w d5,MIDV
  3390.  
  3391.  move.b (a2,d1.w*4),d4
  3392.  move.b 1(a2,d1.w*4),d5
  3393.  move.w d4,SECU
  3394.  move.w d5,SECV
  3395.  
  3396. ; move.w d4,d2
  3397. ; move.w d5,d3
  3398. ;
  3399. ; sub.w #128,d2
  3400. ; sub.w #128,d3
  3401. ; muls d2,d2
  3402. ; muls d3,d3
  3403. ; add.l d3,d2
  3404. ; jsr CALCSQROOT
  3405. ;
  3406. ; tst.w d2
  3407. ; beq.s .nochng2
  3408. ;
  3409. ; sub.w #128,d4
  3410. ; sub.w #128,d5
  3411. ; muls #127,d4
  3412. ; muls #127,d5
  3413. ; divs d2,d4
  3414. ; divs d2,d5
  3415. ; add.w #128,d4
  3416. ; add.w #128,d5
  3417. ;.nochng2:
  3418. ;
  3419. ; add.w MIDU,d4
  3420. ; add.w MIDV,d5
  3421. ; asr.w #1,d4
  3422. ; asr.w #1,d5
  3423. ; move.w d4,MIDU
  3424. ; move.w d4,MIDV
  3425.  
  3426.  move.l #NORMBRIGHTS,a2
  3427.  move.w (a2,d0.w*2),d0
  3428.  move.w (a2,d1.w*2),d1
  3429.  
  3430.  sub.w d0,d1
  3431.  swap d1
  3432.  swap d0
  3433.  divs.l d6,d1
  3434.  
  3435.  move.w FIRSTLEN,d6
  3436.  beq.s .nofirstbit
  3437.  ext.l d6
  3438.  
  3439.  moveq #0,d2
  3440.  moveq #0,d3
  3441.  moveq #0,d4
  3442.  moveq #0,d5
  3443.  move.w FIRSTU,d2
  3444.  move.w MIDU,d3
  3445.  move.w FIRSTV,d4
  3446.  move.w MIDV,d5
  3447.  
  3448.  sub.w d2,d3
  3449.  swap d2
  3450.  swap d3
  3451.  divs.l d6,d3
  3452.  move.l d3,a4
  3453.  
  3454.  sub.w d4,d5
  3455.  swap d4
  3456.  swap d5
  3457.  divs.l d6,d5
  3458.  move.l d5,a5
  3459.  
  3460.  bsr DOABITOFLINE
  3461. .nofirstbit:
  3462.  
  3463.  move.w LASTLEN,d6
  3464.  beq.s .nosecbit
  3465.  ext.l d6
  3466.  
  3467.  moveq #0,d2
  3468.  moveq #0,d3
  3469.  moveq #0,d4
  3470.  moveq #0,d5
  3471.  move.w MIDU,d2
  3472.  move.w SECU,d3
  3473.  move.w MIDV,d4
  3474.  move.w SECV,d5
  3475.  
  3476.  sub.w d2,d3
  3477.  swap d2
  3478.  swap d3
  3479.  divs.l d6,d3
  3480.  move.l d3,a4
  3481.  
  3482.  sub.w d4,d5
  3483.  swap d4
  3484.  swap d5
  3485.  divs.l d6,d5
  3486.  move.l d5,a5
  3487.  
  3488.  bsr DOABITOFLINE
  3489. .nosecbit:
  3490.  
  3491.  bra .noline
  3492.  
  3493. .bothaway
  3494.  
  3495. ; Both are away, so do it simply.
  3496.  
  3497. .bothtowards:
  3498.  
  3499. ; Both are towards, so do it simply and flag all
  3500. ; points as towards.
  3501.  
  3502.  swap d2
  3503.  clr.w d2
  3504.  swap d3
  3505.  clr.w d3
  3506.  sub.l d2,d3
  3507.  divs.l d6,d3
  3508.  move.l d3,a6
  3509.  move.l d2,d7
  3510.  
  3511.  moveq #0,d2
  3512.  moveq #0,d3
  3513.  moveq #0,d4
  3514.  moveq #0,d5
  3515.  move.b (a2,d0.w*4),d2
  3516.  move.b (a2,d1.w*4),d3
  3517.  move.b 1(a2,d0.w*4),d4
  3518.  move.b 1(a2,d1.w*4),d5
  3519.  
  3520.  sub.w d2,d3
  3521.  swap d2
  3522.  swap d3
  3523.  divs.l d6,d3
  3524.  move.l d3,a4
  3525.  
  3526.  sub.w d4,d5
  3527.  swap d4
  3528.  swap d5
  3529.  divs.l d6,d5
  3530.  move.l d5,a5
  3531.  
  3532.  move.l #NORMBRIGHTS,a2
  3533.  move.w (a2,d0.w*2),d0
  3534.  move.w (a2,d1.w*2),d1
  3535.  
  3536.  sub.w d0,d1
  3537.  swap d1
  3538.  swap d0
  3539.  divs.l d6,d1
  3540.  
  3541.  bsr DOABITOFLINE
  3542.  
  3543. .noline:
  3544.  rts
  3545.  
  3546.  DOABITOFLINE:
  3547.  subq #1,d6
  3548.  
  3549. .STICKINGOUR:
  3550.  swap d7
  3551.  move.b d7,2(a3)
  3552.  swap d7
  3553.  add.l a6,d7
  3554.  swap d0
  3555.  move.w d0,4(a3)
  3556.  swap d0
  3557.  add.l d1,d0
  3558.  swap d2
  3559.  move.b d2,8(a3)
  3560.  swap d4
  3561.  move.b d4,9(a3)
  3562.  swap d4
  3563.  adda.w #16,a3
  3564.  swap d2
  3565.  add.l a4,d2
  3566.  add.l a5,d4
  3567.  dbra d6,.STICKINGOUR
  3568.  
  3569.  rts
  3570.  
  3571. FIRSTY: dc.w 0
  3572. LASTY: dc.w 0
  3573. FIRSTU: dc.w 0
  3574. SECU: dc.w 0
  3575. FIRSTV: dc.w 0
  3576. SECV: dc.w 0
  3577.     dc.w 0
  3578. FIRSTLEN: dc.w 0
  3579.     dc.w 0
  3580. LASTLEN: dc.w 0
  3581. MIDU: dc.w 0
  3582. MIDV: dc.w 0
  3583.  
  3584. *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  3585.  
  3586.  
  3587.  
  3588. ************************************************
  3589. ************************************************
  3590. ************************************************
  3591. ************************************************
  3592. ************************************************
  3593. ************************************************
  3594. ************************************************
  3595. ************************************************
  3596. ************************************************
  3597. ************************************************
  3598. ************************************************
  3599. ************************************************
  3600. ************************************************
  3601. ************************************************
  3602. ************************************************
  3603. ************************************************
  3604. ************************************************
  3605.  
  3606.  move.w d3,TOPLINE
  3607.  move.w d4,BOTLINE
  3608.  
  3609.  
  3610.  
  3611.  
  3612. *********************************************
  3613.  
  3614. CALCSQROOT:
  3615.  tst.l d2
  3616.  beq .oksqr
  3617.  
  3618.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  3619.  
  3620.  move.w #31,d0
  3621. .findhigh
  3622.  btst d0,d2
  3623.  bne .foundhigh
  3624.  dbra d0,.findhigh
  3625. .foundhigh
  3626.  asr.w #1,d0
  3627.  clr.l d3
  3628.  bset d0,d3
  3629.  move.l d3,d0
  3630.  
  3631.  move.w d0,d1
  3632.  muls d1,d1    ; x*x
  3633.  sub.l d2,d1    ; x*x-a
  3634.  asr.l #1,d1    ; (x*x-a)/2
  3635.  divs d0,d1    ; (x*x-a)/2x
  3636.  sub.w d1,d0    ; second approx
  3637.  bgt .stillnot0
  3638.  move.w #1,d0
  3639. .stillnot0
  3640.  
  3641.  move.w d0,d1
  3642.  muls d1,d1
  3643.  sub.l d2,d1
  3644.  asr.l #1,d1
  3645.  divs d0,d1
  3646.  sub.w d1,d0    ; second approx
  3647.  bgt .stillnot02
  3648.  move.w #1,d0
  3649. .stillnot02
  3650.  
  3651.  move.w d0,d1
  3652.  muls d1,d1
  3653.  sub.l d2,d1
  3654.  asr.l #1,d1
  3655.  divs d0,d1
  3656.  sub.w d1,d0    ; second approx
  3657.  bgt .stillnot03
  3658.  move.w #1,d0
  3659. .stillnot03
  3660.  
  3661.  move.w d0,d2
  3662.  ext.l d2
  3663.  
  3664.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  3665.  
  3666. .oksqr
  3667.  rts
  3668.  
  3669.  
  3670. **********************************************
  3671. **********************************************
  3672. **********************************************
  3673. **********************************************
  3674. **********************************************
  3675. **********************    ************************
  3676. **********************************************
  3677. **********************************************
  3678. **********************************************
  3679. **********************************************
  3680. **********************************************
  3681. **********************************************
  3682. **********************************************
  3683. **********************************************
  3684. **********************************************
  3685. **********************************************
  3686. **********************************************
  3687. **********************************************
  3688. **********************************************
  3689.  
  3690. TOPLINE: dc.w 0
  3691. BOTLINE: dc.w 0
  3692.  
  3693.  
  3694.  
  3695. **********************************************
  3696. **********************************************
  3697. **********************************************
  3698. **********************************************
  3699. **********************************************
  3700. **********************************************
  3701. **********************************************
  3702. **********************************************
  3703. **********************************************
  3704. **********************************************
  3705. **********************************************
  3706. **********************************************
  3707. **********************************************
  3708. **********************************************
  3709. **********************************************
  3710. **********************************************
  3711. **********************************************
  3712. **********************************************
  3713. **********************************************
  3714.     
  3715.  
  3716.     
  3717.  dc.w 0
  3718. YDIFF: dc.w 0
  3719.  
  3720. SPINAROUND: dc.w 0    
  3721. XCOS: dc.w 0
  3722. YCOS: dc.w 0
  3723. XSIN: dc.w 0
  3724. YSIN: dc.w 0
  3725. XCOS3: dc.w 0
  3726. YCOS3: dc.w 0
  3727. XSIN3: dc.w 0
  3728. YSIN3: dc.w 0
  3729. XCOS2: dc.w 0
  3730. YCOS2: dc.w 0
  3731. XSIN2: dc.w 0
  3732. YSIN2: dc.w 0
  3733. XADD: dc.l 0
  3734. YADD: dc.l 0
  3735. ZADD: dc.l 0
  3736. XOFF: dc.w 0
  3737. YOFF: dc.w 0
  3738. OLDXM: dc.w 0
  3739. OLDYM: dc.w 0
  3740.  
  3741.  
  3742.  
  3743. TEXTUREADD: dc.w 0
  3744.  
  3745.  
  3746. **********************************************************
  3747.  
  3748. UVCOORDS: ds.l 250
  3749. ROTATEDPTS: ds.l 250*4
  3750. SHADOWPTS: ds.l 250*4
  3751. ONSCREENPTS: ds.l 250
  3752.  
  3753. ZOFF: dc.w 768
  3754.  
  3755. LEFTRIGHT: ds.l 256
  3756.  
  3757. POLYGONDATA:
  3758.  ds.b 30000
  3759.  
  3760. OBJNAME: dc.b "ab3:vectobj/testcube",0
  3761.  even
  3762. doslibname: dc.b 'dos.library',0
  3763.  even
  3764. doslib: dc.l 0
  3765.  
  3766. ****************************
  3767.  
  3768. SINETABLE:
  3769.  incbin "ab3:includes/bigsine"
  3770.  
  3771.  
  3772. YANG: dc.w 0
  3773. XANG: dc.w 0
  3774.  
  3775.  
  3776. xmouse: dc.w 0
  3777. ymouse: dc.w 0
  3778.  
  3779. spleen: dc.w 0
  3780. lastspleen: dc.w 0
  3781.  
  3782. COPIEDPAL:
  3783.  dc.w 256,0
  3784.  ds.l 3*256
  3785.  ds.l 10
  3786.  
  3787. SHADOWBUFFER: ds.l 65536/4
  3788. HIGHLIGHT: incbin "work:temp/HIGHLIGHT"
  3789.  
  3790. PALETTEBIT:
  3791. ; incbin "256palette"
  3792. ; dc.w $ffff,$fffe
  3793.  
  3794.  incbin "ab3:shadowtex/shadowpal"
  3795.  
  3796.  include "ab3:source_4000/chunky.s"
  3797.  
  3798. willy: ds.w 48
  3799.  
  3800.  
  3801. PALS:
  3802.  ds.l 2*49
  3803.  
  3804. pregour: dc.b 0
  3805. Gouraud: dc.b 0
  3806.  
  3807. PointAngPtr: dc.l 0
  3808. FRAMENUM: dc.w 0
  3809. PolyAngPtr: dc.l 0
  3810. PtsPtr: dc.l 0
  3811. LinesPtr: dc.l 0
  3812. POINTER_TO_POINTERS: dc.l 0
  3813. FRAME: dc.w 4
  3814. FLIBBLE: dc.w 0
  3815. START_OF_OBJECT: dc.l 0
  3816. num_points: dc.w 0
  3817. num_frames: dc.w 0
  3818. SORTIT: dc.w 0
  3819. PartBuffer: ds.l 2*32
  3820. endparttab:
  3821.  
  3822. x1: dc.w 0
  3823. y1: dc.w 0
  3824. z1: dc.w 0
  3825. x2: dc.w 0
  3826. y2: dc.w 0
  3827. z2: dc.w 0
  3828. x2b: dc.w 0
  3829. y2b: dc.w 0
  3830. z2b: dc.w 0
  3831.  
  3832. x3: dc.w 0
  3833. y3: dc.w 0
  3834. z3: dc.w 0
  3835.  
  3836. l1: dc.w 0
  3837. l2: dc.w 0
  3838.  
  3839. OBJONOFF: dc.l 0
  3840.  
  3841. SAVEHIGHS: ds.w 30
  3842.  
  3843. FASTBUFFER:
  3844.  dc.l fasty
  3845.  
  3846. fasty: ds.b 320*256
  3847.  
  3848. NORMBRIGHTS: ds.w 250
  3849.  
  3850. SPECBRIGHTS:
  3851.  dcb.l 100,31
  3852.  
  3853. ENDNORM:
  3854.  
  3855. LEFTUVS: ds.w 8*256
  3856. RIGHTUVS: ds.w 8*256
  3857.  
  3858. NORMVECTS: ds.w 3*250
  3859.  
  3860. ;WORLD: incbin "ab3:includes/world"
  3861.  
  3862. ;TWEEN: incbin "ab3:includes/tweenbrightfile"
  3863.  
  3864.  
  3865.  
  3866. NEBBIE: incbin "work:temp/nebbieroar"
  3867.     ds.l (192/4)*16
  3868.  
  3869.  SECTION blib,code_f
  3870.  
  3871. TEXTURES:
  3872.  incbin "ab3:includes/shadowmaps"
  3873.  even
  3874.  
  3875.  SECTION BGDROP,code_c
  3876.  
  3877. RAWSCRN:
  3878.  ds.l 2560*8
  3879.